RegEx жадный поиск и возврат - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь лучше понять процесс возврата для жадного сопоставления.

Запрос вашей помощи для подтверждения / исправления моего утверждения, упомянутого ниже.

Регулярное выражение: .*man

Тестовая строка: ithmati

Я использовал отладчик regex101.com и запечатлел первые 11 шагов процесса сопоставления в картинку, которую я прикрепил к этому сообщению.

Утверждение: На шаге 9 причина, по которой двигатель возвращается в тестовой строке к «h», заключается в том, что на шаге 6 он уже вернулся к «m», поэтому следующий лучший путь - пойти дальше назад.

Рис: Жадный откат

Рис .: Нежадный возврат

1 Ответ

0 голосов
/ 13 марта 2019

Показанные вами шаги выглядят именно так, как я и ожидал.На шаге 9 движку не удается найти букву n в следующей позиции, чтобы завершить сопоставление для .*man.Поскольку .* является жадным, двигатель запускается на конце строки и пытается сначала найти последний экземпляр man.Поскольку этого не произошло с первым совпадением ma, двигатель падает назад, пытаясь найти более раннее совпадение.Он не находит более раннего шанса для совпадения, поэтому шаблон затем завершается неудачно без совпадения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...