0

假设我有一个有效的 htmlfile,我将它保存到一个字符串中。现在我想提取锚元素(hrefs)的链接。因此我想使用纯正则表达式。

preg_match_all('/<a [^>]*href="(.+)">/', $html, $match);

通常我想收到这样的字符串:

http://www.thisIsAHrefLinkIWantToHave.de

但相反,我还收到以下字符串,由正则表达式中的 (.+) 逻辑引起:

index?a=f">Link</a> &nbsp; <a href="index?a=ds">Link 2</a> &nbsp; <a href="index?b=b">Link 3</a> &nbsp; <a href="index?gf=d">Link 4</a> &nbsp; <a href="index?ttt=q">Link 5</a> &nbsp; <a href="index?g=my">Link 6</a> &nbsp; <a href="http://mysite.org

我找到了 Xpath 或 DOMDocument 之类的解决方案( PHP String Manipulation: Extract hrefs),但我想要没有这些/任何库的解决方案,只需使用正则表达式。我必须做些什么来解决我的正则表达式的问题?

我从第一个“到下一个”想了想。但是如何创建解决问题的那种模式或另一种模式呢?

[编辑:] 解决方案

preg_match_all('/<a [^>]*href="([A-Za-z0-9\/?=:&_.]+)?"/', $html, $match);
4

2 回答 2

1

尝试 preg_match_all('/<a [^>]*href="(.+)?">/', $html, $match);?使.*非贪婪。

于 2013-10-20T03:28:16.467 回答
0

Musa 是正确的,句号 (.) 是贪婪的。尝试 [A-Za-z0-9_]+ 而不是 .+

于 2013-10-20T03:44:46.840 回答