2

我正在为 urls 搜索字符串...而我的 preg_match 给我的演示字符串匹配数量不正确。

细绳:

嘿,来看看我的网站 www.example.com

功能:

preg_match("#(^|[\n ])([\w]+?://[\w]+[^ \"\n\r\t<]*)#ise", $string, $links);
echo count($links);

结果显示为 3。

有人可以帮我解决这个问题吗?我是正则表达式的新手。

4

3 回答 3

5

$links子匹配的数组

如果matches提供,则填充搜索结果。$matches[0]将包含与完整模式匹配的$matches[1]文本,将具有与第一个捕获的带括号的子模式匹配的文本,依此类推。

两组的匹配加上完整正则表达式的匹配产生三个数组项。

也许您更希望所有匹配项都使用preg_match_all.

于 2009-11-20T23:14:10.090 回答
1

如果您使用 preg_match_pattern,(如 Gumbo 建议的那样),请注意,如果您针对此字符串运行正则表达式,它将与您的锚属性“href”的值以及在这种情况下恰好包含网址。这使得两个匹配。

在结果集上运行 array_unique 是明智的:)

于 2009-11-20T23:21:34.357 回答
0

除了关于如何使用的建议之外preg_match,我相信您使用的正则表达式存在严重错误。您可能想尝试这样的事情:

 preg_match("_([a-zA-Z]+://)?([0-9a-zA-Z$-\_.+!*'(),]+\.)?([0-9a-zA-Z]+)+\.([a-zA-Z]+)_", $string, $links);

这应该可以处理大多数情况(尽管如果在顶级域之后有查询字符串,它将不起作用)。将来,在编写正则表达式时,我推荐以下网站来提供帮助: http ://www.regular-expressions.info/尤其是http://regexpal.com/以便在您编写正则表达式时对其进行测试.

于 2009-11-20T23:36:08.237 回答