Кванторы и пустые соответствия
Обновлен: Ноябрь 2007
Кванторы *, +, {n, m} (как и их "отложенные" аналоги) никогда не повторяются после пустого соответствия, если было найдено наименьшее число повторений n. Благодаря этому правилу кванторы не попадают в бесконечные циклы на пустых соответствиях, если m бесконечно (хотя это правило применяется даже в том случае, если m не бесконечно).
К примеру, выражение (a?)* соответствует строке "aaa" и выделяет подстроки (a)(a)(a)(). Обратите внимание, что пятого пустого выделения здесь нет, поскольку после четвертого пустого выделения повторения квантора прекращаются.
Аналогичным образом выражение (a\1|(?(1)\1)){0,2} будет соответствовать пустой строке, а не строке "a", поскольку оно никогда не предпримет попытку использовать раскрытие ()(a). Квантор {0,2} в последней итерации допускает только пустые соответствия. Наоборот, выражение (a\1|(?(1)\1)){2} будет соответствовать "a", так как оно проверяет вариант ()(a); минимальное число итераций (2) заставляет обработчик выполнять повтор после пустого соответствия.