Php 在换行符上使用非常特定的模式进行正则表达式故障排除
我尝试在PHP中操纵字符串以完成以下操作: 输入示例:Php 在换行符上使用非常特定的模式进行正则表达式故障排除,php,regex,string,preg-replace,str-replace,Php,Regex,String,Preg Replace,Str Replace,我尝试在PHP中操纵字符串以完成以下操作: 输入示例: """ line1\n \n line2\n \n \n \n line3\n \n \n \n \n line4\n \n line5 """ 期望输出: """ line1\n line2\n \n line3\n \n line4\n line5 """ 到目前为止,为了在我的javascript中实现这一点,我有:text.split('\n\n').join('\n'),在PHP端,我使用以下表达式:preg\u replac
"""
line1\n
\n
line2\n
\n
\n
\n
line3\n
\n
\n
\n
\n
line4\n
\n
line5
"""
期望输出:
"""
line1\n
line2\n
\n
line3\n
\n
line4\n
line5
"""
到目前为止,为了在我的javascript中实现这一点,我有:text.split('\n\n').join('\n')
,在PHP端,我使用以下表达式:preg\u replace('~(\R{2})\R+~,'$1',$text)
这两种方法都可以,但这个过程似乎很有趣,因为正则表达式根本不是我的专长,我想知道是否有更好的方法可以做到这一点?我肯定有:)尝试查找(\r?\n)?(?:\r?\n){2,}
替换1\n
可选的匹配线中断回写大于2 或者使用\R
(\R)?\R{2,}
尝试查找(\r?\n)?(?:\r?\n){2,}
替换$1\n
可选的匹配线中断回写大于2 或者使用\R
(\R)?\R{2,}
您可以使用
preg_replace('~(\R{2})\R+|(\R){2}~', '$1$2', $text)
见
详细信息
-在组1中捕获两个换行序列,然后是一个或多个换行序列(\R{2})\R+
-或|
-两个换行序列将最后一个换行序列捕获到组2中(\R){2}
preg_replace('~(\R{2})\R+|(\R){2}~', '$1$2', $text)
见
详细信息
-在组1中捕获两个换行序列,然后是一个或多个换行序列(\R{2})\R+
-或|
-两个换行序列将最后一个换行序列捕获到组2中(\R){2}
(\R?\R)\R+
替换$1
特点:
- 要回写的单个未量化捕获
- 不可更改
- 使用完整捕获的换行符进行写回
- 最有效的方法是在用户示例上执行114个步骤
- 不同的方式
请尝试
(\R?\R)\R+
替换$1
特点:
- 要回写的单个未量化捕获
- 不可更改
- 使用完整捕获的换行符进行写回
- 最有效的方法是在用户示例上执行114个步骤