如何从这个HTML中选择http://test.com/
:
<a target="_new" href="http://test.com/" title="test">$293.00</a>
意识到我应该使用 DOM 解析器,但是它适用于几行代码,我宁愿只使用正则表达式。
我试过这个没有成功:
preg_match('/(http|https)':'/'/[a-zA-Z0-9'-'.]+'.[a-zA-Z]{2,3}('/'S*)?/', $html, $url);
谢谢。
你可以通过环顾四周来解决这个问题:
if (preg_match('/(?<=href=").*?(?=")/', $html, $groups)) {
$url = $groups[0];
} else {
$url = "";
}
-
(?<=href=")
的意思是:在href="
之后立即找到一个位置 - 然后匹配任何内容,但尽可能少地与
.*?
匹配 - 这保存在groups[0]
- 当您找到下一个字符的位置时停止
"
当我不使用 DOM 解析器时,这意味着我对内容非常确定,并最终得到一些非常简单的东西......喜欢这个。。。
preg_match('/href="([^"]+)"/', $html, $regs);
网址将出现在$regs[1]中。
如果你只想要 href,你所要做的就是preg_match('/href="([^"]*?)/', $html, $matches)
然后抓取$matches[1]
的内容。
好吧,当然,您的解析器与大量合法 URL 不匹配。 更有用的是,请参阅 http://mathiasbynens.be/demo/url-regex
更具体地注意,/''S* 匹配/",这可能不是您想要的。