regex - 正则表达式中的非贪婪正向回顾
问题描述
我有以下文字
# 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
解决方案
您可以使用
(?<=\\\\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 中,替换s
为m
)。
推荐阅读
- selenium-webdriver - Selenium - 键盘无法访问元素 - 尝试输入日期
- jquery - 在 Liferay 6.2 中上传自定义引导模板
- google-app-engine - Google App Engine 如何关联不同的用户 ID?
- java - Cmd 中的 Gradlew 和 Java 9 :FAILURE: 构建失败并出现异常
- arrays - 值不为空的控制器中的 angularjs 过滤器
- python - 为什么我的 Django 模板表单中的单选按钮没有显示在屏幕上?
- mysql - 如何根据两张表的连接条件结果连接两张表
- c - 我正在使用 Windows 10 和 C (visual studio 2015) 编写聊天程序
- amazon-web-services - 通过 API Gateway 接收文件并上传到 S3 的示例
- jenkins - 如何通过 Jenkins 中的 Groovy 复制/克隆作业?