前瞻行为

时间:2015-06-14 16:49:33

标签: regex r lookahead

你怎么能让前瞻不贪婪?我希望第一种情况不匹配任何东西(如第二种情况),但它返回“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)

1 个答案:

答案 0 :(得分:4)

前瞻已应用于bear中的winnie|bear(?= bear|pooh),而不是winnie。如果您希望它同时适用于<{p>}

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

现在它将适用于两者。 由于winnieored part bear匹配,因此从未进入过画面,也不是前瞻。

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