2017-03-28 21 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>

相關問題