PHP RegEx不会提起问号

时间:2012-04-12 02:09:48

标签: php regex preg-match-all

我正在尝试使用PHP函数“preg_match_all”匹配字符串中的url。它工作正常,但它不会匹配带有问号的网址。

例如,这将匹配正常:

http://espn.com/mlb

但这不匹配:

http://espn.com/mlb?player=71

这是我正在使用的正则表达式,

$regexUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";

我无法弄清楚为什么问号没有被\ S拿起。我尝试了很多不同的表达方式,无法得到问号以匹配。有任何想法吗?

编辑:

事实证明preg_match_all返回true,但我没有在preg_match_all输出中转义问号,所以我之后创建的preg_replace调用失败了。

1 个答案:

答案 0 :(得分:3)

问号表示前一个匹配是可选的,即

/https?/

将导致“http”和“https”匹配。您必须转义问号才能与之匹配。

例如:

/https\?/

现在只匹配“https?”。