如何在两行中使用 preg_replace

How to use preg_replace over two lines

我正在寻找一种 preg_replace 模式来替换跨两行的背靠背文本。我想转换这个:

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

对此:

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

或者这个:

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

当然,如果 ul 标签在同一行,$pattern = "/<\/ul><ul>/"$replacement = "" 会生成我要查找的内容。但是,只要 ul 标签之间有换行符,模式就会失败。

模式 $pattern = "/<\/ul>.*<ul>/s" 在孤立的情况下有效,但在

时就很糟糕了
... </li></ul>

... THIS IS SOME VALUABLE CONTENT ...

<ul><li> ...

我知道 \n\r<br \/> 或需要在 ul 标签之间的某种组合,但我没有找不到正确的解决方案。

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

如果您只是想用可能的空格替换两行的 ul 标记 ...

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

否则,如果尝试替换之间的所有内容;在正则表达式中添加一个非贪婪量词。

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