首页 > 解决方案 > 正则表达式中的非贪婪正向回顾

问题描述

我有以下文字

# Heading Level 1\\r\\n## Heading Level 2\\r\\n### Heading 
Level 3\\r\\n#### Heading Level
4\\r\\n##### Heading Level 5\\r\\n###### Heading Level 6\\r\\nHeading Level 13
Alternate\\r\\n======================\\r\\n

我需要匹配Heading Level 13 Alternate(基本上任何黑白换行符和 ===

我试过以下

(?<=\\\\r\\\\n)?.*?(?=\\\\r\\\\n=+)

但问题是我的正则表达式对 \r\n 很贪心,并且一直在往回走。我想先停止它\r\n

标签: regex

解决方案


您可以使用

(?<=\\\\r\\\\n)(?:(?!\\\\r\\\\n)[\w\W])*?(?=\\\\r\\\\n=)

请参阅正则表达式演示详情

  • (?<=\\\\r\\\\n)\\r\\n- 紧跟在字符串前面的位置
  • (?:(?!\\\\r\\\\n)[\w\W])*?- (一个缓和的贪婪令牌)任何字符,零个或多个但尽可能少的出现,这不是\\r\\n字符序列的起点
  • (?=\\\\r\\\\n=)- 紧跟\\r\\n=字符串的位置。

在这里,[\w\W]使用而不是.为了.跨行匹配(默认情况下不匹配换行符,但这取决于正则表达式的风格)。您还可以使用带有点的s标志或其(?s)内联版本(在 Onigmo/Ruby 中,替换sm)。


推荐阅读