在换行符上使用非常特定的模式进行正则表达式故障排除
Regex troubleshooting with very specific pattern on newlines
我正在尝试操作 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+~', '', $text)
。
这两种方法都可以,但这个过程看起来很时髦,而且由于正则表达式根本不是我的事,我想知道 是否有更好的方法来做到这一点? 我确定有 :)
尝试查找 (\r?\n)?(?:\r?\n){2,}
替换 \n
可选的匹配换行符回写大于 2.
或使用 \R (\R)?\R{2,}
您可以使用
preg_replace('~(\R{2})\R+|(\R){2}~', '', $text)
详情
(\R{2})\R+
- 在第 1 组中捕获两个换行符序列,然后是一个或多个换行符序列
|
- 或
(\R){2}
- 两个换行符序列将其中最后一个捕获到第 2 组。
替换为第 1 组或第 2 组的值(因为其中之一始终为空字符串)。
不同的方式。
尝试 (\R?\R)\R+
替换
demo
特点:
- 要写回的单个未量化捕获
- 无交替
- 使用完整捕获的换行符回写
- 最有效的方法,用户样本 114 步
我正在尝试操作 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+~', '', $text)
。
这两种方法都可以,但这个过程看起来很时髦,而且由于正则表达式根本不是我的事,我想知道 是否有更好的方法来做到这一点? 我确定有 :)
尝试查找 (\r?\n)?(?:\r?\n){2,}
替换 \n
可选的匹配换行符回写大于 2.
或使用 \R (\R)?\R{2,}
您可以使用
preg_replace('~(\R{2})\R+|(\R){2}~', '', $text)
详情
(\R{2})\R+
- 在第 1 组中捕获两个换行符序列,然后是一个或多个换行符序列|
- 或(\R){2}
- 两个换行符序列将其中最后一个捕获到第 2 组。
替换为第 1 组或第 2 组的值(因为其中之一始终为空字符串)。
不同的方式。
尝试 (\R?\R)\R+
替换 demo
特点:
- 要写回的单个未量化捕获
- 无交替
- 使用完整捕获的换行符回写
- 最有效的方法,用户样本 114 步