从preg_match_all的链接中删除最后一个\“

时间:2017-08-24 08:18:03

标签: php regex preg-match-all

下一个链接示例返回2个链接,两个链接都以 \“结尾。示例文本中没有以\”结尾的链接。但是当我在WordPress网站中运行preg_match_all()函数时,我得到了这个。

我需要解决这个问题,只获得的链接以\“

结尾

这里是我从中检索链接的文本示例:

$banner_link = '<a href="https://mobico.nl/telefoon/?tt=26156_1144596_250041_&amp;r=" target="_blank" rel="nofollow"><img src="http://ti.tradetracker.net/?c=26156&amp;m=1144596&amp;a=250041&amp;r=&amp;t=html" width="300" height="250" border="0" alt="" /></a>';

preg_match_all('!https?://\S+!', $banner_link, $matches);
$all_urls = $matches[0];
print_r($all_urls[0]); 
echo '<br>';
print_r($all_urls[1]); 

这里的结果都以\“

结尾
  

https://mobico.nl/telefoon/?tt=26156_1144596_250041_&r= \“

     

http://ti.tradetracker.net/?c=26156&m=1144596&a=250041&r=&t=html \“

我可以使用str_replace()来实现,但可能使用preg_match_all()函数。

1 个答案:

答案 0 :(得分:0)

首先,输入字符串中\"之后没有r=preg_match_all()无法返回以\"结尾的网址。

preg_match_all()标识的网址以"结尾,因为regex过于宽松。

试试这个:

$banner_link = '<a href="https://mobico.nl/telefoon/?tt=26156_1144596_250041_&amp;r=" target="_blank" rel="nofollow"><img src="http://ti.tradetracker.net/?c=26156&amp;m=1144596&amp;a=250041&amp;r=&amp;t=html" width="300" height="250" border="0" alt="" /></a>';

preg_match_all('!https?://[^"]*!', $banner_link, $matches);
print_r($matches);

输出结果为:

Array
(
    [0] => Array
        (
            [0] => https://mobico.nl/telefoon/?tt=26156_1144596_250041_&amp;r=
            [1] => http://ti.tradetracker.net/?c=26156&amp;m=1144596&amp;a=250041&amp;r=&amp;t=html
        )
)