如何在两行中使用 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);
我正在寻找一种 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);