只使用正则表达式拉出一个链接

时间:2011-01-26 01:39:22

标签: php regex

您好我有以下代码,我只想拉出有www的链接。在他们中

<p> Text < href="http://url.com/link/">link text</a> more text < href="http://www.anotehrurl.com/">more link text</a> and < href="http://www.anotherurl.com/sub/sub/link.html">link text</a>. more text < href="http://keepurl.co.uk/link/">link text</a> more text < href="http://www.anotherurl.com/sub/sub/link.html">link text</a>. < href="http://www.anotherurl.com/sub/sub/link.html">link text</a>.  < href="http://www.anotehrurl.com/">more link text</a></p>

即时使用reg表达式:

(<a href="http:\/\/www.[\d\D]*?\/">([\d\D]*?)<\/a>)

基本上我想匹配任何以www开头的链接,并且不匹配任何链接,即keepurl.co.uk /.......

我已经通过rubular提出了这个问题并提出以下建议:

{ 结果1

1&LT; href =“http://www.anotehrurl.com/”&gt;更多链接文字 2.更多链接文字 结果2

1&LT; href =“http://www.anotherurl.com/sub/sub/link.html”&gt;链接文字。更多文字 &LT; href =“http://keepurl.co.uk/link/”&gt;链接文字 链接文本 结果3

1&LT; href =“http://www.anotherurl.com/sub/sub/link.html”&gt;链接文字。 &LT; href =“http://www.anotherurl.com/sub/sub/link.html”&gt;链接文字。 &LT; href =“http://www.anotehrurl.com/”&gt;更多链接文字 2.更多链接文字 }

因为你可以看到它超出我想要的范围。

欢呼声

3 个答案:

答案 0 :(得分:1)

这个怎么样:

       <?php
        $html = <<<END
   <p> Text < href="http://url.com/link/">link text</a> more text
       < href="http://www.anotehrurl.com/">more link text</a>
       and < href="http://www.anotherurl.com/sub/sub/link.html">link text</a>.
       more text < href="http://keepurl.co.uk/link/">link text</a> more text
       < href="http://www.anotherurl.com/sub/sub/link.html">link text</a>.
       < href="http://www.anotherurl.com/sub/sub/link.html">link text</a>.
       < href="http://www.anotehrurl.com/">more link text</a></p>
END;


        $r = '#href=\"http://(www\.[^\"]*)\">(.+)</#iU';

        preg_match_all($r, $html, $m);

        var_dump($m[1]);
        var_dump($m[2]);
        ?>

输出:

array
  0 => string 'www.anotehrurl.com/' (length=19)
  1 => string 'www.anotherurl.com/sub/sub/link.html' (length=36)
  2 => string 'www.anotherurl.com/sub/sub/link.html' (length=36)
  3 => string 'www.anotherurl.com/sub/sub/link.html' (length=36)
  4 => string 'www.anotehrurl.com/' (length=19)
array
  0 => string 'more link text' (length=14)
  1 => string 'link text' (length=9)
  2 => string 'link text' (length=9)
  3 => string 'link text' (length=9)
  4 => string 'more link text' (length=14)

答案 1 :(得分:0)

/<a.+?href="([http:\/\/]?www\..+?)".+?>/i

类似的东西。

答案 2 :(得分:0)

假设您已将文本保存在$string变量中,这应该适合您。

preg_match('@href="(http://www\.(?!keepurl.co.uk).*?)"@i', $string, $m);

($!regex)执行的地方:

  

零宽度负向前瞻。与正向前瞻相同,只是如果前瞻内的正则表达式无法匹配,则整体匹配才会成功。

regular expression reference page