扩展正则表达式中的分组是什么意思?

扩展正则表达式中的分组是什么意思?

我读到过,分组将表达式视为单个单元。这是什么意思?

此外,grep "\(grouping\)" file.txt或者grep -E "(grouping)" file.txt做什么?我还读到表达式是用括号分组的。同样,什么是分组表达式?

当我运行该命令时,它会grouping在文件中突出显示。grep "\(grouping\)"与 有何不同grep grouping

答案1

本质上,它使括号内的内容被视为单个原子。例如,如果你想应用量词,这很有用。比较:

$ printf 'groupinggrouping' | grep -Eo "grouping*"
groupingg

(其中*仅适用于g)与

$ printf 'groupinggrouping' | grep -Eo "(grouping)*"
groupinggrouping

其中*应用于整个子模式grouping

在大多数(全部?)正(grouping)则表达式方言中,捕获匹配的文本进入索引捕获组,允许它随后反向引用。这没有太多的应用grep——最明显的是检测重复元素例如。

$ printf 'ba\nbb\nbc\n' | grep '\(.\)\1'
bb

匹配后面跟着相同字符的任何单个字符。在模式替换的上下文中(sed例如,而不是grep),捕获组也可以在替换文本中引用。

还有其他更具表现力的方言变体 - 例如 Perl 的(?:grouping) -捕获群组。

有关详细信息,请参阅例如

相关内容