反斜杠如何影响正则表达式中的花括号?

时间:2019-06-15 20:21:36

标签: regex sed grep

所以我开始在Linux中使用grepsed学习 regex ,我不明白为什么必须保存花括号?因此,保存意味着转义字符以按字面意义进行匹配,但是当我键入grep 'test{2}'时,它将仅与test{2}匹配,而当我键入'test\{2\}'时,它将与testtest匹配。没关系,但是为什么反斜杠在其他修饰符中还有其他用法呢?例如,在.(点)的情况下,当我键入test.时,它将匹配任何带有test的文本,后跟任何字符。在这种情况下,我们需要使用反斜杠将其解释为字符。因此,当我这样使用它时:test\.仅与test.

匹配

如此总结:为什么在{中使用反斜杠将花括号保存为字符,而在其他修饰符的情况下,例如.为何将反斜杠保存为字符一个特殊的...

我知道这听起来很有趣,但我听不懂...

1 个答案:

答案 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语法之间的差异只是历史性的,在这之后似乎没有特定的想法。