我正在为 urls 搜索字符串...而我的 preg_match 给我的演示字符串匹配数量不正确。
细绳:
嘿,来看看我的网站 www.example.com
功能:
preg_match("#(^|[\n ])([\w]+?://[\w]+[^ \"\n\r\t<]*)#ise", $string, $links);
echo count($links);
结果显示为 3。
有人可以帮我解决这个问题吗?我是正则表达式的新手。
我正在为 urls 搜索字符串...而我的 preg_match 给我的演示字符串匹配数量不正确。
细绳:
嘿,来看看我的网站 www.example.com
功能:
preg_match("#(^|[\n ])([\w]+?://[\w]+[^ \"\n\r\t<]*)#ise", $string, $links);
echo count($links);
结果显示为 3。
有人可以帮我解决这个问题吗?我是正则表达式的新手。
$links
是子匹配的数组:
如果
matches
提供,则填充搜索结果。$matches[0]
将包含与完整模式匹配的$matches[1]
文本,将具有与第一个捕获的带括号的子模式匹配的文本,依此类推。
两组的匹配加上完整正则表达式的匹配产生三个数组项。
也许您更希望所有匹配项都使用preg_match_all
.
如果您使用 preg_match_pattern,(如 Gumbo 建议的那样),请注意,如果您针对此字符串运行正则表达式,它将与您的锚属性“href”的值以及在这种情况下恰好包含网址。这使得两个匹配。
在结果集上运行 array_unique 是明智的:)
除了关于如何使用的建议之外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/以便在您编写正则表达式时对其进行测试.