在扩展正则表达式(ERE,Extended Regular Expression)中,圆括号 ()
通常有以下几种非转义的使用情况:
分组:
圆括号用于创建捕获组,它会把括号内的模式作为一个整体对待。例如,(\w+\s)+
可以匹配一个或多个由一个或多个单词字符跟一个空格组成的序列。这里的每个\w+\s
都是一个独立的分组,整个模式会重复匹配。重复计数:
当圆括号包围的模式后面跟随{m,n}
这样的量词时,表示该组模式至少重复 m 次,最多重复 n 次。例如(A\d){2,3}
将匹配 "A1A2"、"A1A2A3" 这样的序列,其中包含"A"和一个数字的组合,最少两次,最多三次。选择性匹配:
圆括号内的选项间可以用|
分隔,代表“或”的逻辑关系。例如(apple|banana)
匹配的是 "apple" 或 "banana"。后向引用:
虽然这里没有提到转义,但值得注意的是,圆括号内的模式可以在同一个正则表达式中通过\数字
的形式进行后向引用,这里的数字对应的是捕获组的编号。例如,(.)\1
会匹配连续的相同字符。
在扩展正则表达式中,如果想要匹配圆括号自身而不具有上述特殊含义,那么就需要对它们进行转义,即写作 \(
和 \)
。如果不希望圆括号具有特殊功能,仅将其视为普通字符,则根据上下文可能需要进行这样的转义操作。但在很多情况下,由于扩展正则表达式在某些工具(如egrep
、grep -E
等)中对括号的特殊处理,当括号内确实没有包含需要分组或特殊操作的内容时,它们可能会被当作普通字符对待而无需转义。然而在编写正则表达式时,为了明确性和防止歧义,建议总是对可能引起歧义的特殊字符进行转义。