你怎样才能使前瞻非贪婪?我希望第一个案例不匹配任何内容(如第二个案例),但它返回“winnie”。我猜是因为它在“the”之后贪婪地匹配?

str <- "winnie the pooh bear"

## Unexpected
regmatches(str, gregexpr("winnie|bear(?= bear|pooh)", str, perl=T))
# [1] "winnie"

## Expected
regmatches(str, gregexpr("winnie(?= bear|pooh)", str, perl=T))
# character(0)

最佳答案

前瞻应用于 bear 中的 winnie|bear(?= bear|pooh) 而不是 winnie 。如果您希望它同时应用于两者

(?:winnie|bear)(?= bear|pooh)

现在它将适用于两者。
因为 winnie 匹配,ored part bear 从未出现过,也没有前瞻。

在第二种情况下 lookahead 应用于 winnie 。所以它失败了。

关于regex - 前瞻行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30832006/

10-13 04:44