我需要一个正则表达式来匹配并替换简单DOM Html Parser中包含整个段落标记的连续字符格式化标签
输入:
<p><b><i>Lorem Ipsum Content</i></b></p>
预期输出:<p>Lorem Ipsum</p>
在下面的情况下,正则表达式应匹配并仅替换<b>
标记,因为它是唯一包含整个段落标记的标记
例如:输入:<p><b>Text <i> some more text </i>text inside </b></p>
输出:<p>Text <i> some more text </i>text inside </p>
谢谢。
答案 0 :(得分:0)
不是优雅的,也许是部分的灵魂。
input
字符串while True:
<i>
替换为""
<b>
替换为""
""
break
。第3步的正则表达式是这样的。
<p>\s*(<i>)*\s*.*(<\/i>)\s*<\/p>
对于<b>
代码,请将<i>
替换为<b>
等。
答案 1 :(得分:0)
看起来像这样:
foreach($html->find('p') as $p) {
while(preg_match('/^<([^>]+)>(.*)<\/\1>$/', $p->innertext, $m)){
$p->innertext = $m[2];
}
}
请注意,正则表达式中的\1
与第一个捕获组中的html标记名称匹配,可能不是必需的,但我是为奖励而做的。