2010-02-10 43 views
0

我已经卡住了我刚才已经帮助上一个问题 - 它是一个新的问题,但只是稍稍。的preg_match - 检索HREF

我有这样的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"> 

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

谢谢大家的帮助。

+0

我怀疑问题是你传递字符串中它。 – 2010-02-10 00:44:27

+0

变量'$ epilink' - 包含一些html,至少有一个我已经作为示例粘贴的url。我的正则表达式是否适用于此? – Abs 2010-02-10 00:47:56

+0

它会的。但是,如果文本中较早的字符串中有任何其他字符串匹配,它将会替换这些字符串。 – 2010-02-10 00:51:20

回答

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 
+0

该字符串将包含更多的html。正如我对阿农说的,我怎样才能得到一场比赛?顺便说一句,谢谢你回答我以前的问题。 – Abs 2010-02-10 00:55:32

+0

第一场比赛?你可以退出for循环。请参阅编辑 – ghostdog74 2010-02-10 01:26:59