【发布时间】:2014-03-30 03:30:32
【问题描述】:
考虑以下命令:
text <- "abcdEEEEfg"
sub("c.+?E", "###", text)
# [1] "ab###EEEfg" <<< OKAY
sub("c(.+?)E", "###", text)
# [1] "ab###EEfg" <<< WEIRD
sub("c(.+?)E", "###", text, perl=T)
# [1] "ab###EEEfg" <<< OKAY
第一个完全符合我的预期,基本上只匹配第一个 E。第二个应该基本上与第一个相同,因为我所做的只是添加一个捕获组(尽管我没有使用它),但由于某种原因,它捕获了一个额外的 E。也就是说,它并不是完全贪婪的(即,如果它是,它会捕获所有的 E)。更奇怪的是,它实际上仍然匹配模式,即使sub 结果表明.+? 部分被遗漏了EE,它不能再被正则表达式的其余部分匹配。这表明在计算匹配子表达式的长度时存在偏移问题,而不是在实际匹配中。
最后一个完全相同,但使用 PCRE 运行,并且按预期工作。
是我遗漏了什么还是这种行为没有记录/有问题?
【问题讨论】:
-
这闻起来像 R 中的一个错误。
-
在 Tre github 页面上以 a bug 的身份发布。