提问人:Epiphanisation 提问时间:1/26/2011 最后编辑:Dan GrossmanEpiphanisation 更新时间:1/27/2011 访问量:173
仅使用正则表达式拉出一个链接
only pulling one link out using regular expressions
问:
嗨,我有以下代码,我只想拉出具有 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>
im 使用 reg 表达式:
(<a href="http:\/\/www.[\d\D]*?\/">([\d\D]*?)<\/a>)
基本上我想匹配任何以 www 开头的链接,而不是匹配任何 keepurl.co.uk/ 链接......
我已经把它通过rubular拿出来了:
{ 结果 1
1.< href=“http://www.anotehrurl.com/”>更多链接文本 2.更多链接文字 结果 2
1.< href=“http://www.anotherurl.com/sub/sub/link.html”>链接文本。更多文本 < href=“http://keepurl.co.uk/link/”>链接文本 2.link 文本 结果 3
1.< href=“http://www.anotherurl.com/sub/sub/link.html”>链接文本。< href=“http://www.anotherurl.com/sub/sub/link.html”>链接文本。< href=“http://www.anotehrurl.com/”>更多链接文本 2.更多链接文字 }
正如你所看到的,它拉出的比我想要的要多。
干杯
答:
0赞
dqhendricks
1/26/2011
#1
/<a.+?href="([http:\/\/]?www\..+?)".+?>/i
类似的东西。
0赞
mhitza
1/26/2011
#2
假设您已将文本保存在变量中,这应该适合您。$string
preg_match('@href="(http://www\.(?!keepurl.co.uk).*?)"@i', $string, $m);
在哪里:($!regex)
零宽度负前瞻。与正前瞻相同,只是只有当前瞻中的正则表达式不匹配时,整体匹配才会成功。
一个很好的正则表达式参考页面。
1赞
Marcin
1/26/2011
#3
这个呢:
<?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)
评论
0赞
Epiphanisation
1/29/2011
不太确定为什么当我尝试您的确切版本时,我无法让它工作,但我使用了您的部分答案和我现有的代码,现在它可以工作了,谢谢 marcin :)
0赞
Epiphanisation
1/29/2011
这是我最后使用的 /(<a href=“http:///\/www\.[^\“]*”>([\d\D]*?)<\/a>)/
评论
{}