regex - 正则表达式中负前瞻运算符的问题
问题描述
我有一个字符串==a==123==b==456==c==879
,我想得到字母和数字。
我用 expr 试试这个==(.*?)==(.*?)
。
这给了我:
Match 1
1. a
2.
Match 2
1. b
2.
Match 3
1. c
2.
...但是数字丢失了。我怎样才能得到它们?
我想得到这个:这给了我:
Match 1
1. a
2. 123
Match 2
1. b
2. 456
Match 3
1. c
2. 789
我相信我必须使用负前瞻运算符,但我不知道在这种情况下它是如何工作的。
(我只是为了这个例子分隔了字母和数字。在实际使用中,我只能分隔==
。)
解决方案
您可以告诉正则表达式匹配到==
或使用字符串结尾
==(.*?)==(.*?)(?===|$)
==([\s\S]*?)==([\s\S]*?)(?===|$) # To also match line breaks in between ==
(?s)==(.*?)==(.*?)(?===|$) # Also matches line breaks in between == in PHP and many other flavors but Ruby
(?m)==(.*?)==(.*?)(?===|\Z) # To also match line breaks in between == in Ruby
细节
==
- 一串两个=
字符(.*?)
- 第 1 组:除换行符之外的任何 0 个或多个字符,尽可能少==(.*?)
-==
组 2 匹配除换行符以外的任何 0 个或多个字符,尽可能少(?===|$)
- 一个正向的前瞻,它要求==
或字符串的结尾立即位于当前位置的右侧。
推荐阅读
- html - html表格内的自动滚动文本
- asp.net - Kentico CMS 中包含的内容
- unity3d - 上传到 Github 时保持统一项目的清洁
- git - git tfs clone 不会抛出 git 命令
- ios - 如何在不使用 AudioUnit 的回调的情况下播放音频
- slack-api - 使用 Web API DM 许多用户的正确方法
- patch - 如何在 yocto recipe 中将补丁应用于根文件系统中的文件
- c++ - Rcpp - sourceCpp - 未定义符号
- python - FailedPreconditionError: GetNext() 在加载 Tensorflow Saved_Model 后失败
- angular - Angular 6 私有方法