Regex 在使用全局选项(/g)时,如何使用正则表达式匹配空行?
我知道这个一般性的问题肯定被问过很多次,但在尝试建议的解决方案时,我一无所获。我想匹配一个不带“>的新行字符,或者一个单独的新行字符,但是我似乎找不到任何常用的建议来匹配一个空行 示例(pcre):Regex 在使用全局选项(/g)时,如何使用正则表达式匹配空行?,regex,Regex,我知道这个一般性的问题肯定被问过很多次,但在尝试建议的解决方案时,我一无所获。我想匹配一个不带“>的新行字符,或者一个单独的新行字符,但是我似乎找不到任何常用的建议来匹配一个空行 示例(pcre): /([^>])\n | ^\n)/$2\n/g 在: 你好,世界! 文本 生成的输出: Hello World!<br> <tag> text<br> 你好,世界 文本 超出预期: Hello World!<br> <br> &l
/([^>])\n | ^\n)/$2
\n/g
在:
你好,世界!
文本
生成的输出:
Hello World!<br>
<tag>
text<br>
你好,世界
文本
超出预期:
Hello World!<br>
<br>
<tag>
text<br>
你好,世界
文本
此处可编辑:
我相信我遗漏了一些基本的东西,了解这些知识可能会让我更新问题标题,使之更具体,对其他人更有帮助。您的正则表达式是正确的,但您的选项是错误的。您只需启用“多行”选项,使“^”匹配行的开头,而不是文档的开头。您现在启用了“/g”全局选项,这是正确的。您还需要添加“/m”(因此它最终是“/gm”)。由于您的正则表达式风格是PCRE(PHP),因此您也可以使用负查找: 搜索正则表达式:
(?<!>)\n
(?)\n
并替换为使用:
<br>\n
\n
这里的
(?)
是一种负回溯,只有在\n
前面没有字符时才断言为真(替换为$1
\n
)?如果末尾有两个空行怎么办?预期的行为是什么?如果你的正则表达式风格支持lookbehing,那么顺便说一句,什么是正则表达式风格?如果是PCRE,那么我建议的lookbehing解决方案也应该适合你。@anubhava谢谢,你是对的,确实如此。啊,这解释了为什么我一直在努力匹配字符串的开头和结尾,非常感谢。一旦我被允许,我会改进标题并给你答案。
(?<!>)\n
<br>\n