正则表达式:"(^|)"与"(|^)"的区别

7

我有一个关于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”?

4
使用默认库(POSIX 1003.2 扩展正则表达式)时,不确定原因,但使用 pcre 时,grepl("(^|)over","stackoverflow", perl = TRUE) 的表现符合预期。请注意,此翻译可能需要根据上下文进行修正,以确保最准确的表达。 - rawr
1个回答

6

4
默认情况下,R使用TRE实现POSIX ERE,并通过选项支持PERL类型正则表达式。详情请见:https://github.com/laurikari/tre - IRTFM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接