Упреждающее поведение

Как сделать просмотр вперед нежадным? Я бы хотел, чтобы первый случай ничему не соответствовал (как второй случай), но он возвращает «винни». Я думаю, потому что это жадно соответствует после "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)

person Rorschach    schedule 14.06.2015    source источник


Ответы (1)


Упреждающий просмотр применяется к bear в winnie|bear(?= bear|pooh), а не winnie. Если вы хотите, чтобы он применялся к обоим видам использования

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

Теперь это будет применяться к обоим. Поскольку winnie совпадало с ored part bear, это никогда не фигурировало в картине, как и в прогнозе.

Во втором случае lookahead применяется к winnie. Так что это не удается.

person vks    schedule 14.06.2015
comment
Оооо и столько ✩ баллов ✪ уже вижу сейчас ツ чай ☕ на твой 50к или 100к день рождения точно! - person Jonny 5; 14.06.2015