假设我有一个有效的htmlfile,我将其保存为字符串。现在我想提取锚元素(hrefs)的链接。因此我想使用纯正则表达式。
preg_match_all('/<a [^>]*href="(.+)">/', $html, $match);
通常我想收到这样的字符串:
http://www.thisIsAHrefLinkIWantToHave.de
但我收到了以下字符串,由正则表达式中的(。+)引起的逻辑:
index?a=f">Link</a> <a href="index?a=ds">Link 2</a> <a href="index?b=b">Link 3</a> <a href="index?gf=d">Link 4</a> <a href="index?ttt=q">Link 5</a> <a href="index?g=my">Link 6</a> <a href="http://mysite.org
我找到了像Xpath或DOMDocument这样的解决方案 PHP String Manipulation: Extract hrefs)但我想要没有那些/任何库的解决方案,只需要正则表达式。我必须做些什么才能解决我的正则表达式问题?
我从第一个“到下一个”想到了。但是如何创建该模式或其他模式,解决了这个问题?
[编辑:] 解决方案
preg_match_all('/<a [^>]*href="([A-Za-z0-9\/?=:&_.]+)?"/', $html, $match);
答案 0 :(得分:1)
尝试preg_match_all('/<a [^>]*href="(.+)?">/', $html, $match);
,?
使.*
非贪婪。
答案 1 :(得分:0)
穆萨是正确的,因为期间(。)是贪婪的。尝试[A-Za-z0-9 _] +而不是。+