所以我开始在Linux中使用grep
和sed
学习 regex ,我不明白为什么必须保存花括号?因此,保存意味着转义字符以按字面意义进行匹配,但是当我键入grep 'test{2}'
时,它将仅与test{2}
匹配,而当我键入'test\{2\}'
时,它将与testtest
匹配。没关系,但是为什么反斜杠在其他修饰符中还有其他用法呢?例如,在.
(点)的情况下,当我键入test.
时,它将匹配任何带有test的文本,后跟任何字符。在这种情况下,我们需要使用反斜杠将其解释为字符。因此,当我这样使用它时:test\.
仅与test.
如此总结:为什么在{
中使用反斜杠将花括号保存为字符,而在其他修饰符的情况下,例如.
为何将反斜杠保存为字符一个特殊的...
我知道这听起来很有趣,但我听不懂...
答案 0 :(得分:1)
在不使用grep
的情况下使用-E
时,您需要转义(“保存”)括号作为量词,因为使用的正则表达式风味是 POSIX BRE :
grep 'test\{2\}' file # => Finds lines having testt, not testtest
和
grep '\(test\)\{2\}' file # => Finds lines having testtest
相同的 POSIX ERE 变体
grep -E 'test{2}' file
grep -E '(test){2}' file
另一个示例是匹配花括号:
grep '{2}' file # => matches lines having {2} in them
grep -E '\{2}' file => same, note the } is not special
请参见more about BRE and ERE POSIX regex standard。
BRE和ERE POSIX语法之间的差异只是历史性的,在这之后似乎没有特定的想法。