2013-08-29 82 views
2

我注意到一些用戶使用@與「/」在PHP中的正則表達式,是兩者之間有區別嗎?我假設用戶首選處理字符串中的「/」。PHP正則表達式@ VS/

$body = preg_replace("@<script[^>]*>.+</script[^>]*>@si", "", $body); 

VS

$body = preg_replace("/<script[^>]*>.+<\/script[^>]*>/si", "", $body); 
+1

沒有區別,只是習慣 –

+3

你是正確的。這兩個都是正則表達式的有效分隔符。 – Mathletics

+3

http://php.net/manual/en/regexp.reference.delimiters.php –

回答

5

作爲每PHP Manual on regex delimiters

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

所以基本上使用斜線或@#沒有區別。但請記住,選擇的分隔符不得出現在正則表達式本身中,否則您將需要轉義該字符。

提示:由於PCRE允許any non-alphanumeric, non-backslash, non-whitespace作爲分隔符,有時它是更好地使用控制字符作爲分隔符時,你無法預知使用正則表達式的內容。見下面的例子:

$repl = preg_replace('^K^foo^K', 'bar', 'foo.txt'); 

下面這段代碼是使用控制字符^K(上殼類型爲ctrl-V-K

+2

附註:'無法預測regex'的內容 - >您應該大多使用'preg_quote()' – HamZa

+0

@HamZa:完全同意 – anubhava

+1

順便說一下,它是不是PCRE所解釋的分隔符,但PHP本身:請參閱http ://stackoverflow.com/questions/482377/php-regex-delimiter-whats-the-point – IMSoP

3

使用/使得它更難把/在正則表達式或更換。使用@會使@難以在正則表達式或替換中使用。除此之外,沒有區別。

相關問題