正则表达式和preg_match - 获取具有特定锚文本的href

时间:2012-05-17 12:38:10

标签: php preg-match

我需要在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个匹配(不是假的)。

2 个答案:

答案 0 :(得分:1)

可能是另一个副本。检查这个问题的第一个答案。正则表达式引擎有时会变得笨拙,特别是当你使用。*贪婪模式时。

Grabbing the href attribute of an A element

答案 1 :(得分:0)

你应该改变

~<a.*href="(.*?)".?>.?This is some anchor text.?</a>~sm

~<a.*?href="(.*?)".*?>.*?This is some anchor text.*?</a>~sm

您错过了*.?表示它只允许一个或没有字符。 target="_blank" class="body1"以及文本前面的空格因此不允许,导致正则表达式失败。

编辑:通过将其替换为.*,使您的第一个.*?更少贪婪,以防止将来出现问题。