为何grep命令使用正则a*p匹配时结果超出预期?
问题解释
首先得明确两个核心点:正则的匹配规则,以及grep的默认行为。
- 正则里的
*是修饰前面紧邻的单个字符,所以a*p的意思是:匹配「零个或多个a」后面紧跟一个p。你理解的*表示零个或多个a是对的,但忽略了高亮显示的表现逻辑。 - grep默认会输出包含匹配片段的整行内容,如果想看到具体的匹配片段,得加
-o选项。执行echo "aapple" | grep -o "a*p"的话,你会看到实际匹配的是两个片段:aap(前两个a+第一个p)和p(第二个p,前面零个a)。 - 终端里grep会高亮所有匹配的片段,这两个片段连起来就是
aapp,所以你看起来像是选中了整个aapp,但实际上是两个独立的匹配结果被高亮了。
补充下:正则匹配是贪婪的,但这里a*只会匹配到第一个p之前的所有a,因为后面的字符是p而非a,所以第一个匹配是aap;第二个p前面没有a,符合「零个a+p」的规则,因此也会被匹配。
内容的提问来源于stack exchange,提问作者asd asd
相关产品推荐
相关产品推荐

