2015-06-14 51 views
4

如何讓lookahead非貪婪?我想第一個案例不匹配任何東西(比如第二個案例),但它返回「winnie」。我猜是因爲它是在「the」之後貪婪地匹配?Lookahead行爲

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) 

回答

4

。如果你想讓它適用於都使用

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

現在,它將應用在兩個先行被應用於winnie|bear(?= bear|pooh)bear,而不是winnie。 因爲winnie匹配ored part bear從來沒有進入圖片,既不是前瞻。

第二種情況lookahead適用於winnie .SO失敗。

+0

Oooh和那麼多✩點✪現在我已經看到了ツ☕☕在你的50k或100k的生日當然! –

+0

@ Jonny5哈哈哈,你是最受歡迎的:)☕<===我們怎麼把這個放在這裏!!!!!!!! – vks

+0

ツ從[☢here☣]得到了它(http://text-symbols.com/cool/)@vks –