2015-02-11 58 views
1

我在尋找preg_replace模式來替換跨兩行背靠背的文本。我想轉換此:如何在兩行中使用preg_replace

... </li></ul> 
<ul><li> ... 

這樣:

... </li> 
<li> ... 

或本:

... </li><li> ... 

當然,$pattern = "/<\/ul><ul>/"$replacement = ""生產什麼我正在尋找,如果ul標籤在同一行。但是,只要ul標籤之間存在換行符,該模式就會失敗。

模式在孤立的案例$pattern = "/<\/ul>.*<ul>/s"的作品,但它是可怕的,當談到

... </li></ul> 

... THIS IS SOME VALUABLE CONTENT ... 

<ul><li> ... 

我知道必須有一個\n,一個\r<br \/>,或一些組合需要之間去ul標籤,但我一直未能找到合適的解決方案。

(據我所知,對於上述情況,有可能比preg_replace更好的解決方案,但它是一系列模式中的一個,並且替換了我在解析器中迭代使用的對,所以我想堅持使用它。)

回答

1

如果你只是想跨兩行可能空格替換ul標籤...

$str = preg_replace('~</ul>\R*<ul>~', '', $str); 

否則,如果試圖取代之間的一切;添加一個非貪婪的量詞到你的正則表達式。

$str = preg_replace('~</ul>.*?<ul>~s', '', $str);