<code> $info = array( "https://segmentfault.com/q/1010000003711515", "http://www.baidu.com?admin.php&jasdhjas=asjd", 'php $a=0; echo "abc";', "假如这是第三个....*^%$#@!()[]{}", ); foreach ($info as $key => $value) { $message = "https://segmentfault.com/q/1010000003711515"; $preg = "/^".$value."$/"; if (preg_match($preg, $message)) { echo '匹配成功'; break; } }</code>
遍歷$info
數組,為其每一個字串前後加上/^
,$/
,變成一個正則表達式,去匹配提供的$message
,但是因為$infoinfoinfo的字串可能有特殊字符,造成出錯,所以請問有沒有辦法把
$info的每個字串轉義?
$info的時候就轉義嗎?
<code> $info = array( "https://segmentfault.com/q/1010000003711515", "http://www.baidu.com?admin.php&jasdhjas=asjd", 'php $a=0; echo "abc";', "假如这是第三个....*^%$#@!()[]{}", ); foreach ($info as $key => $value) { $message = "https://segmentfault.com/q/1010000003711515"; $preg = "/^".$value."$/"; if (preg_match($preg, $message)) { echo '匹配成功'; break; } }</code>
$info數組,為其每一個字串前後加上
/^,
$/ ,變成一個正則表達式,去匹配提供的
$message,但是因為
$infoinfoinfo的字串可能有特殊字符,造成出錯,所以請問有沒有辦法把$info
的每個字串轉義?
難道只能在定義
的時候就轉義嗎?
/
在正規表示式裡面有特殊意義,所以後面的'/'就會出錯,你需要在前面加上反斜線取消轉義。
還有就是正則的通配符都是要用
進行轉義的,你上面的例子應該改寫成
<code>$preg = "/^https:\/\/segmentfault\.com\/q\/1010000003711515$/"; $test = "https://segmentfault.com/q/1010000003711515"; preg_match($preg, $test);</code>
$preg 是一個未知的變數
你這個前提太大了
如果這些表達式是使用者輸入的,那麼應該在錄入介面告知使用者此處是正規表示式,讓他自己注意。
你可以使用js轉義正規表達式的特殊字符,但是可能造成2次轉義(例如用戶本來就輸入已轉義的內容http:|b4831e42daf1db770cdbc01d41578e020|/.+)
範例
<code>document.getElementById('test').value = (new RegExp(document.getElementById('test').value)).toString();</code>