Наречие :ratchet
regex запрещает двигателю возвращаться в количественный подшаблон.
Первый шаблон / :r '{' ~ '}' ( .+? ) /
означает, что шаблон .+?
после того, как он соответствует любому 1 илибольше символов, как можно меньше, не будут повторно проверены, и будут повторно введены при последующем сбое шаблона.
Здесь, в вашем примере {hello} aaa }
, после тестирования {
, .+?
соответствует h
, а затем }
не соответствует e
.Поскольку обратное отслеживание не разрешено, сопоставление не удается, и начинается следующая итерация: h
проверяется на {
, не выполняется и т. Д.
Второе регулярное выражение с <-[}]> +
работает, поскольку оно соответствует любому 1+символы , отличные от }
, и это принципиальное отличие от .+?
, которое может соответствовать }
и обязательно потреблять не менее 1 символа (из-за +
).Таким образом, он не может потреблять }
и находит совпадение.