我想替换'关键字'在< 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);
我无法取代“你好”。请告诉我有什么问题。
答案 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('<img alt="hello" src="http://frbird.qiniudn.com/topic/150609/5576a8837fd32e3b4ece5f6b-hd.jpg">');
$dom = new DOMDocument();
$dom->loadHTML(
$string,
LIBXML_COMPACT | LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD
);
$attr = $dom->documentElement->removeAttribute('alt');
echo $dom->saveHTML();
答案 1 :(得分:0)
首先将<
和>
令牌从源字符串翻译为<
和>
。这样他们就容易处理。然后执行preg_replace()
并在目标字符串中再次将它们翻译回来。
$src= strtr('<img alt="hello" src="http://frbird.qiniudn.com/topic/150609/5576a8837fd32e3b4ece5f6b-hd.jpg">',array('<'=>'<','>'=>'>'));
$trg = strtr(preg_replace('/(<img[^>]*")(hello)(".*)/', '$1xxxxx$3', $src),array('<'=>'<','>'=>'>'));
echo $trg;
不是很优雅,但它会起作用。