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.";
}

提前致谢。

4

2 回答 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 演示

否则,您必须将反斜杠加倍才能实际表示文字反斜杠。请注意,根本不需要转义逗号。您甚至不必在字符类的最后位置转义连字符[a-z0-9.-]

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