我有这个正则表达式
(?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.";
}
提前致谢。
答案 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