Как уже упоминалось в моей другой ответ, .*?
версия ленивая Это означает, что часть, заключенная в скобки, будет применяться к как можно меньшему количеству совпадений с регулярным выражением. Версия с вопросительным знаком вне скобок является жадной: она будет применяться к как можно большему количеству символов.
Оба выражения будут иметь одинаковый эффект, если вы посмотрите только на совпадение, а не на совпадение. Два подстановочных знака получат совпадение, если это возможно, но один минимизирует захваченное количество, а другой максимизирует его. Они отличаются, однако, тем, что они захватывают.
Давайте посмотрим пример захвата различий: singing
. Он содержит буквально ng
дважды. В (.*?)ng
, (.*?)
будет хватать все до первой ng
- как только он это увидит, все готово: лень. В этом случае он будет захватывать si
. (.*)?ng
будет пытаться захватить как можно больше - это жадно - оставляя только последний ng
. Здесь фиксируется singi
.
Если во входной строке не будет нескольких экземпляров детали вне группового символа, вы не увидите разницы.