「@」符號有時用於包圍PHP正則表達式嗎?我有一個代碼庫,發現這個函數調用:@(at)符號preg_replace函數
$content = preg_replace("@(</?[^>]*>)[email protected]", "", $content);
我相信這是去除字符串的所有XML標籤,但我不知道什麼是「@」符號在那裏手段。
「@」符號有時用於包圍PHP正則表達式嗎?我有一個代碼庫,發現這個函數調用:@(at)符號preg_replace函數
$content = preg_replace("@(</?[^>]*>)[email protected]", "", $content);
我相信這是去除字符串的所有XML標籤,但我不知道什麼是「@」符號在那裏手段。
是的,它可以用來包裝表達式。原作者很可能會這樣做,因爲一些(或幾個)表達式包含「更傳統的」/
定界符。通過使用@
,您現在可以使用/
而無需轉義它。
你可以使用:
/pattern/flags
(傳統)@[email protected]
$pattern$flags
您可以使用幾乎所有的標點字符作爲PHP正分隔符表達式。 See the docs here。通常,/
是第一選擇(我會建議在此使用它),但是如果您的正則表達式包含斜槓,則可以使用不同的字符。
大部分時間我看過%...%
,~...~
和#...#
,但@[email protected]
也沒問題。
該手冊稱它們爲PCRE "delimiters"。任何ASCII符號(非字母數字)都可以使用(空字節除外)。
/
的常用替代方法是~
和#
。但@
也一樣有效。
PCRE還允許爲正則表達式匹配大括號,如(...)
或<...>
。
沒有任何ASCII字符 - 只有非alnums,並且反斜槓也是無效的。 –
分隔符可以是任何非字母數字,非反斜槓,非空白字符。 – Karolis
簡短回答是肯定的。使用的具體符號並不重要;它通常應該是沒有出現在模式中的東西。例如,這些都是等效的:
<?php
preg_replace("@(<\?[^>]*>)[email protected]", "", $content);
preg_replace("/(<\?[^>]*>)+/", "", $content);
preg_replace("!(<\?[^>]*>)+!", "", $content);
?>
符號是必要的原因是因爲可能在表達式後添加了修飾符。例如,要搜索不區分大小寫,您可以使用:
<?php
preg_replace("@(<\?[^>]*>)[email protected]", "", $content);
?>
(除非它不是) –
@Henning:那可能是「害羣之馬」。鑑於HTML字符的存在,很可能其他表達式(也在該文件中找到)在其中具有某種形式的'/'(例如,查找'')。但是你是對的,在_that_表達式中沒有'/'。 –
我的部分是Typo,意思是斜槓而不是反斜槓。所以你爲什麼選擇了@角色可能是正確的。 – patorjk