首頁  >  文章  >  後端開發  >  正規表示式 匹配 含有特殊字符

正規表示式 匹配 含有特殊字符

WBOY
WBOY原創
2016-08-04 09:19:401556瀏覽

<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的每個字串轉義? 難道只能在定義

$info

的時候就轉義嗎?

/

在正規表示式裡面有特殊意義,所以後面的'/'就會出錯,你需要在前面加上反斜線取消轉義。

定義了$preg, 卻用的是$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>

此外,你在程序中強行增加/^和$/也可能產生問題。
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn