2011-08-09 114 views
5

「@」符號有時用於包圍PHP正則表達式嗎?我有一個代碼庫,發現這個函數調用:@(at)符號preg_replace函數

$content = preg_replace("@(</?[^>]*>)[email protected]", "", $content); 

我相信這是去除字符串的所有XML標籤,但我不知道什麼是「@」符號在那裏手段。

回答

5

是的,它可以用來包裝表達式。原作者很可能會這樣做,因爲一些(或幾個)表達式包含「更傳統的」/定界符。通過使用@,您現在可以使用/而無需轉義它。

你可以使用:

+3

(除非它不是) –

+0

@Henning:那可能是「害羣之馬」。鑑於HTML字符的存在,很可能其他表達式(也在該文件中找到)在其中具有某種形式的'/'(例如,查找'')。但是你是對的,在_that_表達式中沒有'/'。 –

+0

我的部分是Typo,意思是斜槓而不是反斜槓。所以你爲什麼選擇了@角色可能是正確的。 – patorjk

1

您可以使用幾乎所有的標點字符作爲PHP正分隔符表達式。 See the docs here。通常,/是第一選擇(我會建議在此使用它),但是如果您的正則表達式包含斜槓,則可以使用不同的字符。

大部分時間我看過%...%,~...~#...#,但@[email protected]也沒問題。

2

該手冊稱它們爲PCRE "delimiters"。任何ASCII符號(非字母數字)都可以使用(空字節除外)。

/的常用替代方法是~#。但@也一樣有效。

PCRE還允許爲正則表達式匹配大括號,如(...)<...>

+0

沒有任何ASCII字符 - 只有非alnums,並且反斜槓也是無效的。 –

+0

分隔符可以是任何非字母數字,非反斜槓,非空白字符。 – Karolis

1

簡短回答是肯定的。使用的具體符號並不重要;它通常應該是沒有出現在模式中的東西。例如,這些都是等效的:

<?php 
    preg_replace("@(<\?[^>]*>)[email protected]", "", $content); 
    preg_replace("/(<\?[^>]*>)+/", "", $content); 
    preg_replace("!(<\?[^>]*>)+!", "", $content); 
?> 

符號是必要的原因是因爲可能在表達式後添加了修飾符。例如,要搜索不區分大小寫,您可以使用:

<?php 
    preg_replace("@(<\?[^>]*>)[email protected]", "", $content); 
?>