Регулярное выражение в некоторых случаях просто работает, другие не работают.
https://regex101.com/r/p5u3N6/1
Я ожидал, что регулярное выражение соответствует только группам из двух "{} {}" без нуля между {}
.*? в первой части вашего шаблона проходит через неожиданные части вашего ввода, пока не найдет, потому что . принимает все эти символы. Просто сделать ленивый квантификатор с помощью ? недостаточно - он будет продолжаться, пока не найдет совпадение.
.*?
.
?
\{[^}]*?\}\s\{[^}]*?\}
https://regex101.com/r/p5u3N6/5
Не уверен, что я понял ваши требования, я полагаю, вы хотите, чтобы совпадали только пары {}{}, и не допускайте ничего, кроме одного пробела между этими двумя.Вы можете попробовать это \{([^\{]+)\}\ \{([^\}]+)\}.
{}{}
\{([^\{]+)\}\ \{([^\}]+)\}
Я предполагаю, что мы хотим захватить только три из наших входных данных, перечисленных в демонстрационной версии, используя выражение, похожее на:
(\{.*?\}(.+?){.*?\})
или
(\{(.+?)\}(.+?){(.+?)\})