Preg_match - 检索href

时间:2010-02-10 00:43:07

标签: php regex preg-match

我遇到了一个我刚刚得到帮助的问题 - 这是一个新问题,但只是稍微有些问题。

我有这个preg_match来获取href的内容。请不要告诉我不要使用正则表达式 - 我知道使用其他解析器/类等,但这是一个旧脚本,现在只需修复。 :)没时间重写了!

preg_match("~<a target=\'_blank\' rel=\'nofollow\' href=\"(.*?)\">~i", $epilink, $epiurl);

它返回:

http://www.example.com/frame2.php?view=&epi=54673-r

但是,它应该返回:

http://www.example.com/frame2.php?view=168204&epi=54673

这是一个可以使用的html示例:

<a target='_blank' rel='nofollow' href="http://www.example.com/frame2.php?view=545903&epi=54683">

为什么我返回的网址格式不正确?

感谢大家的帮助。

2 个答案:

答案 0 :(得分:1)

$string="<a target='_blank' rel='nofollow' href=\"http://www.example.com/frame2.php?view=545903&epi=54683\">";
$s = explode('">',$string);
foreach($s as $k){
   if (strpos($k,"href")!==FALSE){
        echo preg_replace('/.*href="|/ms',"",$k);
        break;
   }
}

输出

$ php test.php
http://www.example.com/frame2.php?view=545903&epi=54683

答案 1 :(得分:0)

这应该有效:

$epilink = "<a target='_blank' rel='nofollow' href=\"http://www.example.com/frame2.php?view=545903&epi=54683\">";
preg_match("/<a target='_blank' rel='nofollow' href=\"(.*?)\">/i", $epilink, $epiurl);

print_r($epiurl);

您也可以使用 preg_match_all