This topic created in 1776 days ago, the information mentioned may be changed or developed.
我获得符合模式的最小匹配项
比如:
echo "axxabcaca" | egrep -oe "a.*?c.*?a"
我想要的:
aca
但是:
axxabca
有什么办法呢?
环境:
MacOS
谷歌了下,说是使用-P 参数可以,但是 MAC 的 grep 没有-P 参数
9 replies • 2021-07-06 23:06:26 +08:00
 |
|
1
raaaaaar Jul 5, 2021 via Android
分组捕获吗?我上午才遇到这个问题,P 选项是扩展语法才支持的,可以试下 sed 或者 cut,直接搜 grep 分组捕获就有答案
|
 |
|
3
AoEiuV020 Jul 5, 2021
做不到吧感觉,正则都是从左往右匹配,越前面的越先开始匹配,这个优先级是高于贪婪懒惰的,第一个 a 一定是最优先参与匹配的,不管后面有没有 a 满足条件,
|
 |
|
4
Fu4ng Jul 5, 2021
echo "axxabcaca" | awk '/a.*?c.*?a/{ print $0 }
也不行。
|
 |
|
5
junyee Jul 5, 2021
只能 grep -P 了吧。
``` echo "axxabcaca" | grep -oe "a[^a]*c[^a]*a" ```
|
 |
|
6
lululau Jul 5, 2021
brew install grep 或者 brew install the_silver_searcher
|
 |
|
7
no1xsyzy Jul 6, 2021
正则是最左开始扫描, -P 应该也是解决不了的 你要全局最短应当是反复去掉第一个字符重新扫描一遍,在所有的结果中找到最短的。更优化是每次从上次命中的第一个字符的后一个字符开始重新扫描。
|
 |
|
8
RexG Jul 6, 2021
最先开始的匹配拥有最高的优先权 匹配规则优先级更高
|
 |
|
9
ooops Jul 6, 2021 via iPhone
你可以把所有匹配的拿出来在筛最短的啊 为什么非要正则一步拿出来
|