关于R中的正则表达式,我有一个非常特殊的问题:
grepl("(|^)over","stackoverflow")
# [1] TRUE
grepl("(^|)over","stackoverflow")
# [1] FALSE
grepl("(^|x|)over","stackoverflow")
# [1] FALSE
grepl("(x|^|)over","stackoverflow")
# [1] FALSE
grepl("(x||^)over","stackoverflow")
# [1] TRUE
为什么所有这些表达式的计算结果都不TRUE
?
POSIX正则表达式实际上应该使所有这些为真。看起来R使用了Ville Laurikari的TRE库的略微修改版本,该版本并不完全遵循标准。我会遵循@rawr的建议,并使用perl = TRUE
来获得更合规的正则表达式。
另请参阅:当 OR 正则表达式组的两半匹配时,是否定义了将选择哪个?