如何从正则表达式中的文本中删除特定的URL

时间:2016-05-04 12:35:33

标签: php regex

我有问题从文本中删除特定的url,但是在锚标记之间保留text或html标记。但我不能删除它。我从文本中删除了特定的URL但是,无法获取锚标记之间的文本或html。这是我从文本中删除特定网址的代码。

preg_replace(|<a [^>]*href="http://www.microsoft.com[^"]*"[^>]*>.*</a>|iU, '', $a)

以下是样本

<a href="http://www.microsoft.com/">   <img src="http://c.s-microsoft.com/en-in/CMSImages/MMD_TCFamily_1006_540x304.jpg?version=ac2c5995-fde2-b40b-3f2a-b6a0baa88250" class="mscom-image feature-image" alt="Learn about Lumia 950 and Lumia 950 XL." width="540" height="304">   </a>

我想获取img标签或具有特定网址的锚标签之间的任何文本。

我的代码中是否有任何错误。请指正。我想在php中使用正则表达式中的这个请帮助我。

1 个答案:

答案 0 :(得分:1)

我们再来一次...... Don't use regexes to parse html,使用html解析器,例如DOMDocument

$html = <<< EOF
<a href="http://www.microsoft.com/">   <img src="http://c.s-microsoft.com/en-in/CMSImages/MMD_TCFamily_1006_540x304.jpg?version=ac2c5995-fde2-b40b-3f2a-b6a0baa88250" class="mscom-image feature-image" alt="Learn about Lumia 950 and Lumia 950 XL." width="540" height="304">  SOME TEXT </a>
EOF;

$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
foreach($xpath->query("//a[contains(@href,'microsoft.com')]") as $element ){
        $img = $xpath->query('./img',$element)->item(0);
        echo $img->getAttribute('src'); // img source
        echo $img->getAttribute('alt'); // img alt text
        echo $element->textContent; //text inside the a tag
}
//http://c.s-microsoft.com/en-in/CMSImages/MMD_TCFamily_1006_540x304.jpg?version=ac2c5995-fde2-b40b-3f2a-b6a0baa88250
//Learn about Lumia 950 and Lumia 950 XL.
//SOME TEXT

Ideone Demo