使用RegEx时始终获得“未知修饰符”

时间:2013-02-13 08:31:05

标签: php regex preg-match

我正在尝试使用此页面中的preg_match()第二行单行RegEx: http://daringfireball.net/2010/07/improved_regex_for_matching_urls

(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))

总是得到:

  

......中的未知修饰符'\'

有人可以告诉我如何使用preg_match()正确使用此RegEx,或者RegEx是否错误?

3 个答案:

答案 0 :(得分:1)

你需要用分隔符包围你的正则表达式(在这种情况下,我建议~,因为它没有在你的正则表达式中的任何地方使用)并使用模式修饰符(~i)而不是内联修饰符({ {1}}):

(?i)

答案 1 :(得分:1)

函数filter_var可以更轻松地匹配电子邮件,ips,网址,而无需使用正则表达式。

尝试使用它:

if(filter_var($url, FILTER_VALIDATE_URL) {
    // match!
}

所有过滤器列表: http://www.php.net/manual/en/filter.filters.php

答案 2 :(得分:0)

请参阅PHP手册中的Delimiters部分:

  

使用PCRE功能时,需要图案   由分隔符封闭。分隔符可以是任何非字母数字,   非反斜杠,非空白字符。

     

经常使用的分隔符是正斜杠(/),哈希符号(#)和   tildes(〜)。