R - 为什么str_detect在使用以dash结尾的'words'上使用单词边界时返回与grepl不同的结果

问题描述 投票:4回答:1

str_detect的帮助页面指出“等效于grepl(pattern,x)”,但是:

str_detect("ALL-", str_c("\\b", "ALL-", "\\b"))
[1] FALSE

grepl(str_c("\\b", "ALL-", "\\b"), "ALL-")
[1] TRUE

我想其中一个没有按预期工作?或者我错过了什么?

r regex str-replace stringr
1个回答
1
投票

将参数perl = TRUE添加到grepl()时,它会得到相同的结果:

> grepl(str_c("\\b", "ALL-", "\\b"), "ALL-")
[1] TRUE
> grepl(str_c("\\b", "ALL-", "\\b"), "ALL-", perl = T)
[1] FALSE

这个论点意味着grepl()将使用Perl Compatible Regex。

?grep有这个警告,这可能是相关的?

gsub和gregexpr的POSIX 1003.2模式在重复的字边界(例如,pattern =“\ b”)时无法正常工作。对于这样的匹配使用perl = TRUE(但是对于非ASCII输入可能无法正常工作,因为'word'的含义取决于系统)。

© www.soinside.com 2019 - 2024. All rights reserved.