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

时间:2015-03-20 12:19:25

标签: regex r curly-braces

我试图理解R正则表达式中的花括号是如何工作的。帮助文件说:

{N} 前面的项目恰好匹配n次。

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

{N,M} 前面的项目至少匹配n次,但不超过m次。

我有这样的矢量:

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

当我这样做时

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

我希望它只返回“aa”,但我得到了一切。换句话说,它产生与

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

为什么?

1 个答案:

答案 0 :(得分:4)

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

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

^断言我们刚开始,$声称我们已经结束了。所以上面的grep只返回恰好有两个a的元素的索引,即1

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

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