逃避逗号

时间:2015-08-21 09:21:32

标签: php regex preg-match url-validation

我有这个正则表达式

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

提前致谢。

2 个答案:

答案 0 :(得分: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.-]内的最后位置逃脱连字符。

答案 1 :(得分: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`!()\[\]{};:'".,<>?«»“”‘’]))

allocator_traits
相关问题