Php 使用正则表达式替换两个的单断点标记

Php 使用正则表达式替换两个的单断点标记,php,regex,Php,Regex,虽然我意识到使用regex(而不是使用PHP-dom操纵器)操纵某些html的陷阱/危险,但我正在尝试实现一些应该非常简单且没有风险的东西 基本上,我有一些未清理的html副本,来自一个数据库,它不使用段落,而是使用换行标记来产生段落的效果。有时,虽然用户只输入带有单个分隔符的内容,因此文本行返回,但没有出现空行。在这种情况下,并且只有在这种情况下,我才想用两个()来替换单个) 所以作为一个例子 This is <br>a test<br><br>exampl

虽然我意识到使用regex(而不是使用PHP-dom操纵器)操纵某些html的陷阱/危险,但我正在尝试实现一些应该非常简单且没有风险的东西

基本上,我有一些未清理的html副本,来自一个数据库,它不使用段落,而是使用换行标记来产生段落的效果。有时,虽然用户只输入带有单个分隔符的内容,因此文本行返回,但没有出现空行。在这种情况下,并且只有在这种情况下,我才想用两个(


)来替换单个

所以作为一个例子

This is <br>a test<br><br>example!  
这是一个
测试

示例!
将成为

This is <br><br>a test<br><br>example! 
这是一个测试

示例!

请注意,第二组中断是如何被保留的,因为它已经有了2个标记。

只需将一个或多个出现的

替换为

:)

替换什么:

(<br>)+

)+
替换为:

<br><br>


您可以使用来解决此问题:

(?<!<br>)<br>(?!<br>)
(?)
(?!
请参见此处的示例:

(?

如果存在
NOPREFIX
,则第一部分阻止匹配;如果存在
NOPOSTFIX
,则第二部分阻止匹配。

一个简单的方法是先用占位符替换双分隔符,然后用双分隔符替换单分隔符,然后用双分隔符替换占位符。如果文本一致(没有额外的空格或斜杠,也没有三重分隔符),那么您可以使用简单的字符串替换而不是正则表达式来完成此操作。OP只想在有单个字符串时进行替换,这将匹配任何数字,例如



(?<!NOPREFIX)
(?!NOPOSTFIX)