转义逗号
Escaping a comma
我有这个正则表达式
(?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.";
}
提前致谢。
您应该在此处使用单撇号并转义单撇号:
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.";
}
否则,您必须将反斜杠加倍才能真正表示文字反斜杠。请注意,根本不需要转义逗号。您甚至不必转义字符 class [a-z0-9.-]
.
内最后位置的连字符
你在这里使用了未转义的定界符,即 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`!()\[\]{};:'".,<>?«»“”‘’]))
我有这个正则表达式
(?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.";
}
提前致谢。
您应该在此处使用单撇号并转义单撇号:
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.";
}
否则,您必须将反斜杠加倍才能真正表示文字反斜杠。请注意,根本不需要转义逗号。您甚至不必转义字符 class [a-z0-9.-]
.
你在这里使用了未转义的定界符,即 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`!()\[\]{};:'".,<>?«»“”‘’]))