为何不带-E选项时grep的ca\+模式表现类似扩展正则表达式?
关于grep中BRE模式下
ca\+匹配行为的疑问 测试文件greptest.txt的内容如下:
cat sheep dog money money cat ca+ caa
执行grep 'ca+' greptest.txt时,由于POSIX基本正则表达式(BRE)并未将+纳入元字符范畴,+会被当作普通文本字符处理,匹配结果仅为:
ca+
但执行grep 'ca\+' greptest.txt时,未使用-E选项(该选项用于启用扩展正则表达式ERE模式),匹配结果却和ERE模式下的ca+效果一致:
cat sheep money cat ca+ caa
疑问:为什么不带-E选项时,ca\+模式会表现得类似扩展正则表达式?
这是POSIX标准对基本正则表达式(BRE)的明确规定:在BRE模式下,+这类元字符必须通过添加反斜杠\转义,才能激活它的特殊匹配语义;而在扩展正则表达式(ERE)里,这些字符直接就是具备特殊含义的元字符。
具体到这个场景,+在BRE中默认只是普通文本字符,但写成\+后,它就拥有了ERE中+的功能——匹配前一个字符至少一次。所以ca\+在BRE中的作用,完全等同于ERE模式下的ca+,自然会匹配所有包含c后跟至少一个a的行,也就是你看到的那四行结果。
内容的提问来源于stack exchange,提问作者Jack Ma
相关产品推荐
相关产品推荐

