【问题标题】:Regex and preg_match - get href for a with specific anchor textRegex 和 preg_match - 获取带有特定锚文本的 href
【发布时间】:2012-05-17 12:38:10
【问题描述】:

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

【问题讨论】:

    标签: php preg-match


    【解决方案1】:

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

    Grabbing the href attribute of an A element

    【讨论】:

      【解决方案2】:

      你应该改变

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

      进入

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-10
        • 2012-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-08
        相关资源
        最近更新 更多