如何在两行上使用preg_replace

时间:2015-02-11 03:26:06

标签: php regex 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标签之间进行组合的组合,但我还没有#{1}}标签。能够找到正确的解决方案。

(我知道对于上面概述的情况,有一个比preg_replace更好的解决方案,但它是一系列模式和替换对中的一个,我在解析器中迭代使用,所以我想坚持下去。)

1 个答案:

答案 0 :(得分:1)

如果您只是尝试用可能的空格替换两行ul标签...

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

否则,如果试图替换之间的一切;为你的正则表达式添加一个非贪婪的量词。

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