私はRegExrから直接式を得たが、PHPは、式は電子メールアドレスを一致させるためである=
なぜこの正規表現はPHPで失敗するのですか?
"/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/"
に問題があります。
私はRegExrから直接式を得たが、PHPは、式は電子メールアドレスを一致させるためである=
なぜこの正規表現はPHPで失敗するのですか?
"/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/"
に問題があります。
=
の前のスラッシュ(およびその式のスラッシュ)をエスケープします。区切り文字として/
を使用します。したがって、パターン内で発生する場合は、エスケープする必要があります。
"/[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/"
が動作するはずです。
パターンの開始と終了をマークするデリミタとして/
を使用しましたが、パターン内でその文字も使用しました。異なる区切り文字を使用するか、パターン内でその区切り文字をインスタンスからエスケープする必要があります。あなたが等号を逃れることを意図していたなら、間違ったスラッシュを使いました。
区切り文字として/
を使用しています。正規表現にエスケープされない2つの/
があります。 \/
としてそれらをエスケープ:
"/[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/"
^^ ^^
+1文字列の下のポインタ –