Регулярное выражение Java для соответствия {{символов внутри двойной фигурной скобки}} - PullRequest
8 голосов
/ 18 июля 2011

Я пытаюсь сопоставить все в двойных фигурных скобках в строке.Я использую следующее выражение:

\{\{.*\}\}

Некоторые примеры:

The {{dog}} is not a cat. Это правильно соответствует {{dog}}

Однако,The {{dog}} is a {{cat}} соответствует всему после первого матча вместо того, чтобы возвращать два матча.Я хочу, чтобы он совпадал дважды, один раз для {{dog}} и один раз для {{cat}}

Кто-нибудь знает, как это сделать?

Спасибо.

Ответы [ 4 ]

8 голосов
/ 18 июля 2011

Жадный .* соответствует чему угодно (кроме разрывов строк), поэтому, когда в строке более одного }}, он всегда соответствует последнему }} (если нет \r и \n между двумя }}!).

Попытайтесь заставить .* совпадать неохотно (неуклюже) так:

\{\{.*?}}

Это верно, вам не нужно избегать}.

Вы также можете сделать:

\{\{[^}]*}}

, если {{ ... }} не может содержать один }.

5 голосов
/ 18 июля 2011

Попробуйте с \{\{.*?\}\}

Я полагаю, это потому, что ваш шаблон жадный.

Википедия объясняет это довольно хорошо.

1 голос
/ 18 июля 2011

Вы должны использовать не жадное совпадение:

\{\{.*?\}\}

, чтобы сопоставить все между скобками, используйте:

\{\{(.*?)\}\}
0 голосов
/ 18 июля 2011

Вам нужен модификатор «не жадный», поэтому ваше регулярное выражение равно \{\{.+?\}\}

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