首页 > 解决方案 > 在换行符上使用非常具体的模式进行正则表达式故障排除

问题描述

我正在尝试在 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_replace('~(\R{2})\R+~', '$1', $text)

这两种方法可以完成这项工作,但是这个过程似乎很时髦,因为正则表达式根本不是我的事,我想知道是否有更好的方法来做到这一点?我确定有:)

标签: phpregexstringpreg-replacestr-replace

解决方案


您可以使用

preg_replace('~(\R{2})\R+|(\R){2}~', '$1$2', $text)

查看正则表达式演示

细节

  • (\R{2})\R+- 在第 1 组中捕获两个换行序列,然后是一个或多个换行序列
  • |- 或者
  • (\R){2}- 两个换行序列将最后一个捕获到第 2 组。

替换是 Group 1 或 Group 2 的值(因为其中一个始终是空字符串)。


推荐阅读