2015-08-21 63 views
0

我有這樣的正則表達式逃離逗號

(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»「」‘’])) 

,但我在使用逗號麻煩。像這樣跳出逗號\,不能解決問題。我能做些什麼來使這個正則表達式工作?

我的代碼:

if (preg_match("/(?i)\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»「」‘’]))/", "https://google.com/picture.jpeg")) { 
    echo "A match was found."; 
} else { 
    echo "A match was not found."; 
} 

在此先感謝。

+5

你至少應該說明你想要做你的正則表達式,也許你的正則表達式本身是錯誤的。你可能也想給我們一些例子,說明什麼應該起作用,什麼不應該起作用。轉義你3'/''使它適用於我:https://regex101.com/r/yQ1oG8/1 – DarkMukke

+0

我看到問題是運行正則表達式。有兩個問題:1)代碼不能編譯,或者2)在轉義雙引號後,沒有匹配被返回,對吧? –

回答

1

你應該在這裏使用單引號和逃避單引號:

if (preg_match('/(?i)\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»「」‘’]))/', "https://google.com/picture.jpeg")) { 
//   ^                                         ^    ^
    echo "A match was found."; 
} else { 
    echo "A match was not found."; 
} 

IDEONE demo

否則,你就必須加倍反斜槓實際上代表文字反斜線。請注意,轉義逗號不是必需的。您甚至不必在字符類[a-z0-9.-]內的最後位置處跳脫連字符。

+0

我剛剛添加了箭頭以顯示我所做的更改。請讓我知道,如果有什麼你想在這裏加強。 –

1

您已經轉義符在這裏即經過兩個https?://需求是https?:\/\/和一個在這裏[a-z]{2,4}/需求是[a-z]{2,4}\/

(?i)\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»「」‘’]))