我需要在html页面中获取带有特定锚文本的链接的href。
</tr>
<tr>
<td><a href="/thisisafile.pdf" target="_blank" class="body1">
This is some anchor text </a></td>
</tr>
<tr>
我需要拔出/thisisafile.pdf,我尝试过以下代码:
preg_match('~<a.*href="(.*?)".?>.?This is some anchor text.?</a>~sm',$temp,$matches,0);
$ temp包含上面的代码。
我在在线preg_match测试器中尝试过正则表达式,并且匹配。我已经在没有分隔符的正则表达式测试器中尝试了正则表达式,并且它可以工作。但是当我在我的服务器(linux)上尝试它时,我得到0个匹配(不是假的)。
答案 0 :(得分:1)
可能是另一个副本。检查这个问题的第一个答案。正则表达式引擎有时会变得笨拙,特别是当你使用。*贪婪模式时。
答案 1 :(得分:0)
你应该改变
~<a.*href="(.*?)".?>.?This is some anchor text.?</a>~sm
到
~<a.*?href="(.*?)".*?>.*?This is some anchor text.*?</a>~sm
您错过了*
。 .?
表示它只允许一个或没有字符。 target="_blank" class="body1"
以及文本前面的空格因此不允许,导致正则表达式失败。
编辑:通过将其替换为.*
,使您的第一个.*?
更少贪婪,以防止将来出现问题。