Совпадение текста между символами (избегайте вложения) - PullRequest
0 голосов
/ 08 декабря 2018

Дано:

"abc{defghij{kl}mnopqrst}uvwxyz{aaaaaaaaaa}"

Я хочу сопоставить текст между символами { и последним }, исключая вложение - то есть тексты {defghij{kl}mnopqrst} и {aaaaaaaaaa}.

Без вложенного {kl} выражение регулярного выражения \{[^{}]*\} работает просто отлично.Но не с вложенным {kl}.

Есть ли способ сделать это?Если это невозможно, могу ли я сказать «сопоставить текст между {и}, если размер вложенного текста не менее, например, 3 символа, чтобы не совпадал вложенный {kl}, содержащий два символа? (Я предполагаю, что одинуровень вложенности)

Редактор: https://www.freeformatter.com/java-regex-tester.html

Спасибо,

1 Ответ

0 голосов
/ 08 декабря 2018

В вашей проблеме, так как уровни вложенности не достигнут двух, можно решить ее с помощью читаемого, короткого регулярного выражения, которое будет выглядеть так:

\{(?:\{[^{}]*}|[^{}]+)*}

В Java вы должны избегать открытияфигурные скобки, как я сделал.

Выше регулярное выражение соответствует открывающей фигурной скобке, а затем ищет что-то, кроме { и } символов (то есть [^{}]+) или что-то заключенное в фигурные скобки {[^{}]*}и повторяет этот шаблон в максимально возможной степени, а затем ожидает совпадения с закрывающей скобкой.

См. живое демо здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...