我对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
?
答案 0 :(得分:6)
POSIX正则表达式实际上应该使所有这些都成为True。 R uses a slightly modified version的Ville Laurikari's TRE library似乎并不完全符合标准。我会遵循@ rawr的建议并使用perl = TRUE
来获得更符合规范的正则表达式。
另请参阅:When both halves of an OR regex group match, is it defined which will be chosen?