2016-05-05 45 views
0

我已經看到了關於與PHP「@」,像這樣的正則表達式的一些例子:PHP中正則表達式中「@」的功能是什麼?

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

我看得出來,這個計算其分別在$value變量中找到正則表達式匹配的數量,但我想確定在這個特定情況下是否使用了「@」,或者正則表達式中的「@」的主要功能是什麼?

你能幫助我嗎?

+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的任何事物中使用你想要的任何東西。唯一的「可移植性」問題是將正則表達式移動到not-PCRE,因爲它必須將它們完全刪除,因此它仍然無關緊要。 – Sammitch