1

我正在尝试使用 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 调用失败了。

4

1 回答 1

5

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

/https?/

将导致“http”和“https”匹配。您必须转义问号以匹配它。

例如:

/https\?/

现在将只匹配“https?”。

于 2012-04-12T02:21:16.163 回答