无法使用PHP Regex替换关键字

时间:2015-06-10 14:17:50

标签: php regex

我想替换'关键字'在< img .. keyword ... />使用PHP正则表达式。

$content = '<img alt="hello" src="http://frbird.qiniudn.com/topic/150609/5576a8837fd32e3b4ece5f6b-hd.jpg">';

$content = preg_replace('/(<img\s(?!>)*?)(hello)((?!>)*>)/U', '$1%&&&&&%$3', $content);

我无法取代“你好”。请告诉我有什么问题。

2 个答案:

答案 0 :(得分:0)

不要尝试使用RegEx处理HTML(即使是原样转义)。示例:Can you provide some examples of why it is hard to parse XML and HTML with a regex?

使用SimpleXML / DOM解析片段,并以这种方式查找属性。

<?php
$string = html_entity_decode('&lt;img alt="hello" src="http://frbird.qiniudn.com/topic/150609/5576a8837fd32e3b4ece5f6b-hd.jpg"&gt;');

$dom = new DOMDocument();

$dom->loadHTML(
    $string,
    LIBXML_COMPACT | LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD
);

$attr = $dom->documentElement->removeAttribute('alt');

echo $dom->saveHTML();

答案 1 :(得分:0)

首先将&lt;&gt;令牌从源字符串翻译为<>。这样他们就容易处理。然后执行preg_replace()并在目标字符串中再次将它们翻译回来。

$src= strtr('&lt;img alt="hello" src="http://frbird.qiniudn.com/topic/150609/5576a8837fd32e3b4ece5f6b-hd.jpg"&gt;',array('&lt;'=>'<','&gt;'=>'>'));
$trg = strtr(preg_replace('/(<img[^>]*")(hello)(".*)/', '$1xxxxx$3', $src),array('<'=>'&lt;','>'=>'&gt;'));
echo $trg;

不是很优雅,但它会起作用。