2016-05-16 7 views
1

私は一致を確認しようとしています。一致する場合は、文字列から変数名を抽出します。変数名は "$"で始まり、 "\"でエスケープできません。たとえば、 "$ name"は "name"を抽出し、 "\ $ name"または "name"は一致しません。 HERESにコマンド:コン​​パイルに失敗しました::欠落している)PHPがこの正規表現を拒否しています

$match = preg_match("/^(?<!\\)(\$.*)$/", $potential, $name); 

私が構築し、regex101.comを使用してそれをテストし、それが動作しますが、しかし、私は

「するpreg_match()を言ってPHPからエラーを取得していますオフセット13インチで "

と私はそれを参照して何の手掛かりがありません。

答えて

1

私の考えはあなたがPHPで

$match = preg_match('/^(?<!\\\\)(\$.*)$/', $potential, $name);

編集を正規表現を消費するために特定の文字をエスケープする必要がありますということです。バックスラッシュは正規表現とPHPの両方でのエスケープ文字である、あなたは二重にする必要があります。スラッシュをエスケープします。

+1

正規表現とPHPの文字列フォーマットの両方でエスケープしますか? – user81993

+0

はい、バックスラッシュはPHPとRegexのエスケープ文字です – Scuzzy

0

あなたはブラケットを脱出しました:

preg_match('/^(?<!\\) <----HERE 

FYIあなたの正規表現のを読みやすくするために、いくつかの他の区切り文字を使用することができます。たいていの場合、スラッシュとエスケープ文字を使用するため、 '/'を使用すると読みにくくなります。読みやすくするために、 '#'または '〜'や '@'を使用することを検討してください。

オンライン正規表現ツールを選択するには、結果がどの程度正確であるかについて、サービスで使用する正規表現の実装(およびバージョン)によって異なります。私はいつもrubular.com(PCREを使用)を使用しますが、PHPの場合はphpliveregex.comを使用できます