2016-05-05 9 views
0

私は、このような何かPHPの「@」と正規表現についていくつかの例を見てきました。私はこれが$value変数で発見された正規表現の一致の数をカウントすることを見ることができましたPHPの正規表現で "@"の機能は何ですか?

preg_match ("@[a-zA-Z0-9]@i", $value, $occurrences); 

を、しかし、私は "@"がこの特定の場合に使用されているのか、正規表現の "@"の主な機能は何かを確認したいと思います。

お願いします。

+0

現在の '@ 'はデリミタのみです。それが質問のことであれば、 '#'や '/'だった可能性があります。 RTM http://php.net/manual/en/function.preg-match.php –

+1

デリミタの秘密http://stackoverflow.com/a/37058367/557597 – sln

答えて

7

正規表現パターンは、custom delimitersです。最も一般的なものは/で、あなたのケースでは@に変更されました。

カスタムデリミタの利点はエスケープと関係があります。これは、例で最もよく示されています。

は考えてみましょう:

preg_match ("/Some\/Path/i", $value, $occurrences); 

バーサス:

preg_match ("#Some/Path#i", $value, $occurrences); 

しかし、個人的なメモで、私はそれがうまく、正規表現パターンを作るようをカスタマイズし、それらを避ける傾向にあります。区切り文字の標準/を使用してください。

+1

デリミタとしてメタキャラクタを使用することは問題です。それ。 – sln

+0

エスケープを少なくする必要があるオプションは、移植性が向上する可能性があります。たとえば、C#では、エスケープされていない#区切られた正規表現は、有効な正規表現になります。 – sweaver2112

+1

デリミタはPCREのものであり、PCREを実装するものであれば何でも使用できます。唯一の "移植性"の問題は正規表現を非PCREに動かすことです。区切り記号は、それらを完全に削除しなければならないので何の問題もありません。 – Sammitch