2013-03-10 117 views
7

我寫了下面的代碼(是的,它確實有效)並且想知道爲什麼我不需要在模式中逃脫'<'和'>'字符,因爲它們被認爲是'特殊'字符由php手冊。php正則表達式轉義特殊字符

http://www.php.net/manual/en/function.preg-quote.php

var_dump(preg_match('/<[A-Za-z][A-Za-z0-9]*>/', "<html>", $matches)); 

echo "<pre>"; 
var_dump(htmlentities($matches[0])); 
echo "</pre>"; 

輸出:

int(1) 
string(12) "<html>" 
+0

定義「特殊」字符。你知道,所有的角色都有自己的特色。 :) – tchrist 2013-03-10 00:29:50

回答

15

只有在this page上列出的字符需要在PHP正則表達式匹配/替換中轉義。

雖然<>可以爲delimiter行動,它並不需要在給定的例子進行轉義,因爲你已經有/(斜槓)作爲一個delimiter

參照鏈接問題

preg_quote()函數可被用於轉義用於注射的字符串轉換成圖案和其可選的第二個參數可用於指定要躲過了分隔符。

3

<>不是元字符是最上下文。

然而它們被用作這樣的:

  • 命名捕捉組(?P<name>)
  • 後向斷言(?<=...)

所以這就是爲什麼preg_quote將球安全逃脫他們。這可能是多餘的,因爲轉義(?就足夠了。但它也沒有傷害。

+0

+1正確答案。 – 2013-03-10 00:42:12