2015-08-21 91 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`!()\[\]{};:'".,<>?«»“”‘’]))