正则表达式:"(^ |)"vs"(| ^)"

Dan*_*igk 7 regex r

关于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
Run Code Online (Sandbox Code Playgroud)

为什么不对所有这些表达式进行评估TRUE

All*_*uce 6

POSIX正则表达式实际上应该使所有那些True.看来,R使用略加修改威乐Laurikari的TRE库无法很好地遵循标准.我会遵循@ rawr的建议并使用perl = TRUE更合规的正则表达式.

另请参阅:当OR正则表达式组的两半匹配时,是否定义了哪个将被选择?

  • R默认使用POSIX ERE的TRE实现,选项使用PERL类型:https://github.com/laurikari/tre (4认同)