2017-03-28 22 views
3

我需要一个正则表达式匹配和替换连续的字符格式标签封装在简单的DOM HTML解析器正则表达式中除去连续的字符格式标记

输入整段的标签:

<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

它会是这个样子:

foreach($html->find('p') as $p) { 
    while(preg_match('/^<([^>]+)>(.*)<\/\1>$/', $p->innertext, $m)){ 
    $p->innertext = $m[2]; 
    } 
} 

注意的是,在正则表达式的\1 HTML标记名称从匹配第一捕获组,可能不是必要的,但我为奖金做了。

+0

非常感谢@pguardiario – Abdul

0

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

  1. TRIM(条)的input
  2. while True:
  3. 替换<i>""
  4. 替换<b>""
  5. 更换等字符标记""
  6. ...
  7. 如果找不到匹配项在步骤3〜6,然后break

而步骤3的正则表达式就是这样。

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

对于<b>标签,更换<i><b>

相关问题