我正在尝试在PHP中的字符串中进行替换。如何删除仅在PHP组中的部分?
<font.+?(size.+?.)>
我想删除size = x的地方。问题是我无法获取
$text = preg_replace("<font.+?(size.+?.)>","",$text);
工作的功能。
此
的示例来源<font style="background-color: rgb(255, 255, 0);" size="2"><strong><u>text</u></strong></font>
<font size="2">more text</font>
进入这个
<font style="background-color: rgb(255, 255, 0);" ><strong><u>text</u></strong></font>
<font>more text</font>
我想说。哪里有字体标签,如果我看到尺寸 - 任何东西都会移除尺寸属性,但保留其他所有内容。
答案 0 :(得分:4)
$dom = new DOMDocument();
$dom->loadHTML($htmlstring);
$x = new DOMXPath($dom);
$list = $x->query('//font/@size');
for($i = $list->length-1;$i>=0;$i--){
$attr = $list->item($i);
$attr->ownerElement->removeAttributeNode($attr);
}
答案 1 :(得分:1)
正则表达式是一种糟糕的HTML操作方式,但是说,执行这种正则表达式匹配和部分替换的一般技术是匹配:
(<font.+?)(size.+?.)(>)
\________/\________/\_/
1 2 3
然后用
替换$1$3
这取代了对第1组和第3组匹配的替换反向引用,将组2排除,有效地删除了第2组匹配的内容。
答案 2 :(得分:1)
不是最好的解决方案,但要回答你的问题:
$html = <<<END
<font style="background-color: rgb(255, 255, 0);" size="2"><strong><u>text</u></strong></font>
<font size="2">more text</font>
END;
$text = preg_replace('/(<font.*?)(size\s*=[^\s>]*)([^>]*)>/si', '\1\3>', $html);
var_dump($text);