1
raaaaaar 2021-07-05 18:00:20 +08:00 via Android
分组捕获吗?我上午才遇到这个问题,P 选项是扩展语法才支持的,可以试下 sed 或者 cut,直接搜 grep 分组捕获就有答案
|
3
AoEiuV020 2021-07-05 18:17:22 +08:00
做不到吧感觉,正则都是从左往右匹配,越前面的越先开始匹配,这个优先级是高于贪婪懒惰的,第一个 a 一定是最优先参与匹配的,不管后面有没有 a 满足条件,
|
4
Fu4ng OP echo "axxabcaca" | awk '/a.*?c.*?a/{ print $0 }
也不行。 |
5
junyee 2021-07-05 20:10:45 +08:00
只能 grep -P 了吧。
``` echo "axxabcaca" | grep -oe "a[^a]*c[^a]*a" ``` |
6
lululau 2021-07-05 20:19:27 +08:00
brew install grep 或者 brew install the_silver_searcher
|
7
no1xsyzy 2021-07-06 11:06:58 +08:00
正则是最左开始扫描, -P 应该也是解决不了的
你要全局最短应当是反复去掉第一个字符重新扫描一遍,在所有的结果中找到最短的。更优化是每次从上次命中的第一个字符的后一个字符开始重新扫描。 |
8
RexG 2021-07-06 15:38:25 +08:00
最先开始的匹配拥有最高的优先权 匹配规则优先级更高
|
9
ooops 2021-07-06 23:06:26 +08:00 via iPhone
你可以把所有匹配的拿出来在筛最短的啊 为什么非要正则一步拿出来
|