1

我正在尝试使用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()正则表达式或者正则表达式不正确?

4

3 回答 3

1

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

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

该功能filter_var可以更轻松地匹配电子邮件、ips、url,而无需使用正则表达式。

尝试使用这个:

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

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

于 2013-02-13T08:35:09.673 回答
0

请参阅PHP 手册中的分隔符部分:

使用 PCRE 函数时,需要用分隔符将模式括起来。定界符可以是任何非字母数字、非反斜杠、非空白字符。

常用的分隔符是正斜杠 (/)、井号 (#) 和波浪号 (~)。

于 2013-02-13T08:39:06.907 回答