Сопоставление последовательных терминов в строке с игнорированием пробелов

#regex

#регулярное выражение

Вопрос:

можете ли вы сказать мне, как написать регулярное выражение, которое сопоставляет последовательные термины с некоторым шаблоном с игнорированием пробелов между ними?

Например, у меня есть строка, подобная этой: %{aaa} %{vvv} hello %{aaa} %{aaa}

и я хочу сопоставить это: %{aaa}%{vvv} и %{aaa} %{aaa} где шаблон для терминов должен выглядеть следующим образом:

%{<anything>}

Я понятия не имею, как написать регулярное выражение для этого, но для меня это очень важно. Спасибо за совет.

Комментарии:

1. @cfillion Извините, я нажал не ту клавишу .. это просто %

2. Это должно сработать: %{[^}]*}(?:s*%{[^}]*})*

Ответ №1:

Чтобы сопоставить несколько помеченных блоков, разделенных пробелами, вы можете использовать это регулярное выражение:

 %{[^}]*}(?:s*%{[^}]*})*
  

Демонстрация регулярных выражений

Подробные сведения:

  • %{[^}]*} : Сопоставьте один блок , начинающийся с %{ и заканчивающийся }
  • (?:s*%{[^}]*})* : Сопоставьте 0 или более таких тегов , разделенных 0 или более пробелами

Комментарии:

1. спасибо, возможно ли сопоставить только 2 и более терминов в строке?

2. Да, это просто. Просто измените last * на , чтобы сделать это %{[^}]*}(?:s*%{[^}]*})