当我匹配多个否定的前瞻性或多个否定的后瞻性时,我发现R的行为不同。为了说明,假设我要匹配z之后的任何东西,除了str中的a,d,bd或bcd。以下正则表达式有效:
grep("z(?!a|(bc?)?d)",str,perl=TRUE)
接下来,我想匹配z之前的任何内容,但str中的a,b,bd或bcd除外。以类似方式构造的正则表达式会失败(无效的正则表达式):
grep("(?<!a|b(c?d)?)z",str,perl=TRUE)
因此,我必须使用一个相当麻烦的正则表达式:
grep("(?<!a|b)(?<!bd)(?<!bcd)z",str,perl=TRUE)
似乎在(负)后向查找的情况下,如果我要使用“或”运算符|,则子表达式的长度必须相等,但在(负)前向查找的情况下没有这种限制。
我在这里想念什么吗?我的问题是,在负向后看情况下,我有许多模式可以匹配。使用|和?将大大简化正则表达式,但是由于上述原因,我无法使用它们。如何解决这个问题?