Fab*_*Pas 3 php regex preg-match
我有以下正则表达式:
(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’]))
Run Code Online (Sandbox Code Playgroud)
但它给了我以下错误:
Unknown modifier '\'
Run Code Online (Sandbox Code Playgroud)
我尝试像这样转义反斜杠:
(?i)\\b((?:[a-z][\\w-]+:(?:/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))
Run Code Online (Sandbox Code Playgroud)
没有任何运气......我也尝试用波浪号替换反斜杠,再次没有运气。我已经在互联网和 SO 上搜索了有关“\”作为未知修饰符的任何详细信息,但再次没有运气。这里出了什么问题?
应要求提供的代码示例:
$regex = '(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'\".,<>?«»“”‘’]))';
return !preg_match($regex, $url);
Run Code Online (Sandbox Code Playgroud)
谢谢!
只需使用这样的反斜杠转义单引号
$regex = '(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'\".,<>?«»“”‘’]))';
Run Code Online (Sandbox Code Playgroud)
编辑 :
关于未知修饰符警告..
我假设你可能已经在你的preg函数中得到了它。
preg 模式需要一对字符来分隔模式本身。
您应该添加分隔符之类的东西,请参见此处...
$body = preg_replace("/(.*)<!-- start -->(.*)<!-- end -->(.*)/","$2",$body);
------^ -----^
Run Code Online (Sandbox Code Playgroud)
您必须在正则表达式周围添加分隔符:
$regex = '~(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'\".,<>?«»“”‘’]))~';
Run Code Online (Sandbox Code Playgroud)
作为分隔符,您几乎可以使用除空格或单词字符以外的任何字符。
我建议您使用正则表达式中不存在的字符,这样您就不必逃避它。
我在这里使用~
| 归档时间: |
|
| 查看次数: |
1846 次 |
| 最近记录: |