前瞻性行为

4
如何使前瞻非贪婪匹配?我希望第一种情况不要匹配任何内容(就像第二种情况一样),但它返回了“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个回答

5

winnie|bear(?= bear|pooh)中,前瞻应用于bear而不是winnie。如果你想要它同时应用于两者,请使用

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

现在它将适用于两个。 因为winnie匹配了,ored part bear从未出现,也没有前瞻。
在第二种情况下,lookahead被应用于winnie。所以它失败了。

哦,我已经看到了这么多✩点✪,肯定会在你的50k或100k生日时喝上一杯☕茶!ツ - Jonny 5

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