【问题标题】:php anchor tag regexphp锚标记正则表达式
【发布时间】:2009-11-28 09:20:50
【问题描述】:

我有一堆字符串,每个都包含一个锚标记和 url。

字符串例子

here is a link <a href="http://www.google.com">http://www.google.com</a>. enjoy!

我想解析出锚标签和介于两者之间的所有内容。

结果示例

here is a link. enjoy!

但是,href= 部分中的 url 并不总是与链接文本匹配(有时会有缩短的 url,有时只是描述性文本)。

我很难弄清楚如何使用正则表达式或 php 函数来做到这一点。如何从字符串中解析整个锚标记/链接?

谢谢!

【问题讨论】:

    标签: php regex anchor


    【解决方案1】:

    查看您的结果示例,您似乎只是在删除标签/内容 - 您是否要保留已剥离的内容?如果没有,您可能正在寻找strip_tags()

    【讨论】:

      【解决方案2】:

      您不应该使用 regex to parse html 而是使用 html 解析器。

      但是如果你应该使用正则表达式,并且你的锚标签内部内容保证没有像&lt;/a&gt;这样的html,并且每个字符串都保证只包含一个锚标签,那么 - 只有这样 -你可以使用类似的东西:

      /^(.+)&lt;a.+&lt;\/a&gt;(.+)$/ 替换为$1$2

      【讨论】:

        【解决方案3】:

        由于您的问题似乎非常具体,我认为应该这样做:

        $str = preg_replace('#\s?<a.*/a>#', '', $str);
        

        【讨论】:

          【解决方案4】:

          只需使用普通的 PHP 字符串函数即可。

          $str='here is a link <a href="http://www.google.com">http://www.google.com</a>. enjoy!';
          $s = explode("</a>",$str);
          foreach($s as $a=>$b){
              if( strpos( $b ,"href")!==FALSE ){
                  $m=strpos("$b","<a");
                  echo substr($b,0,$m);
              }
          }   
          print end($s);
          

          输出

          $ php test.php
          here is a link . enjoy!
          

          【讨论】:

            【解决方案5】:
            $string = 'here is a link <a href="http://www.google.com">http://www.google.com</a>. enjoy!';
            $text = strip_tags($string);
            echo $text; //Outputs "here is a link . enjoy!"
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-11-27
              • 1970-01-01
              • 2017-06-01
              • 1970-01-01
              • 2011-08-11
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多