R 正则表达式中的大括号如何工作?

How do curly braces in R regex work?

我想了解 R 正则表达式中花括号的工作原理。帮助文件说:

{n} 前一项恰好匹配n次

{n,} 前面的项目匹配了 n 次或更多次。

{n,m} 前一项至少匹配n次,但不超过m次。

我有一个这样的向量:

b <- c("aa", "aaa", "aaaa", "aaaaa")

当我做的时候

b[grep("a{2}", b)]

我希望它 return 只有 "aa" 但我得到了一切。换句话说,它产生与

完全相同的结果
b[grep("a{2,}", b)]

为什么?

因为在这个 aaa 中输入 a{2} 匹配前两个 a 同样适​​用于所有其他元素。所以 grep returns 所有元素的索引。要进行精确的字符串匹配,您必须添加锚点。

> b <- c("aa", "aaa", "aaaa", "aaaaa")
> b[grep("^a{2}$", b)]
[1] "aa"

^ 断言我们在起点,$ 断言我们在终点。所以上面的 grep returns 只有恰好有两个 a 的元素的索引,即 1.

> b <- c("aa", "aaa", "aaaa", "aaaaa")
> b[grep("\ba{2}\b", b)]
[1] "aa"

添加 \b 字边界也适用于这种情况。