我一直在尝试在php项目中使用grubers latest url matching regex。
为了测试它,我把一些非常简单的东西放在一起:
$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`!()\[\]{};:"'.,<>?«»“”‘’]))";
$array = pret_match_all($regex, $theblockofurltext);
print_r($array);
第一个问题是“会逃脱一个字符串,这取决于我将正则表达式包裹起来,所以我只是删除它。使用它是个人的,我永远不会”在任何地方附近的网址。这给我留下了一个新的正则表达式。
$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`!()\[\]{};:'.,<>?«»“”‘’]))";
Raring to go然后我运行了我的小脚本,它给了我以下错误:
Warning: preg_split() [function.preg-split]: Unknown modifier '\' in D:\wwwroot\xxx\index.php on line 14
不幸的是,我在学校的REGEX课程没有被教授到这个正则表达式要求的水平附近,我不知道从哪里开始修复这个用于PHP。任何帮助将不胜感激。毫无疑问,我可能也做了一些愚蠢的事情,所以请放轻松我:)
乔恩
答案 0 :(得分:2)
在RE之前和之后添加#。
$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`!()\[\]{};:'.,<>?«»“”‘’]))#";
答案 1 :(得分:1)
如果您使用PCRE,则必须将正则表达式括在delimiters中。现在,括号()
也可以是分隔符,这就是引擎认为的原因,您的表达式只是(?i)
并将下一个\
解释为修饰符。
您可以使用~
作为分隔符:
$regex = "~(?i)\b...]))~";
<强>更新强>
我不知道PHP是否支持使用 (?i)
部分修改表达式。所以你可能不得不删除它并将修饰符放在分隔符之后(无论如何你将它应用于整个表达式):
$regex = "~\b...]))~i";