Php 用于删除连续字符格式标记的正则表达式

Php 用于删除连续字符格式标记的正则表达式,php,regex,simple-html-dom,Php,Regex,Simple Html Dom,我需要一个正则表达式来匹配和替换简单DOM Html解析器中包含整个段落标记的连续字符格式标记 输入: <p><b><i>Lorem Ipsum Content</i></b></p> Lorem Ipsum内容 预期输出:Lorem Ipsum 在下面的例子中,正则表达式应该只匹配并替换标记,因为这是包含整个段落标记的唯一标记 例如:输入:文本更多的文本在里面 输出:文本更多的文本在里面 谢谢。这不是一个优雅的,也许是

我需要一个正则表达式来匹配和替换简单DOM Html解析器中包含整个段落标记的连续字符格式标记

输入:

<p><b><i>Lorem Ipsum Content</i></b></p>
Lorem Ipsum内容

预期输出:
Lorem Ipsum

在下面的例子中,正则表达式应该只匹配并替换
标记,因为这是包含整个段落标记的唯一标记

例如:输入:
文本更多的文本在里面

输出:
文本更多的文本在里面


谢谢。

这不是一个优雅的,也许是部分的灵魂

  • 修剪(去除)
    输入
    字符串
  • 为True时:
  • 替换为
  • 替换为
  • 将etc字符标记替换为“
  • 如果在步骤3~6中未找到匹配项,则
    中断
  • 步骤3的正则表达式是这样的

    <p>\s*(<i>)*\s*.*(<\/i>)\s*<\/p>
    
    \s*()*\s*()\s*
    

    对于
    标记,请将
    替换为
    ,等等。

    它的外观如下:

    foreach($html->find('p') as $p) {
      while(preg_match('/^<([^>]+)>(.*)<\/\1>$/', $p->innertext, $m)){
        $p->innertext = $m[2];
      }
    }
    
    foreach($html->find('p')作为$p){
    while(preg_match('/^]+)>(.*)$/',$p->innertext,$m)){
    $p->innertext=$m[2];
    }
    }
    
    请注意,正则表达式中的
    \1
    与第一个捕获组中的html标记名匹配,这可能不是必需的,但我这样做是为了获得额外的好处