Соответствие шаблону Java Regex String - PullRequest
0 голосов
/ 19 марта 2019

Мне нужно найти сопоставление с шаблоном для приведенной ниже строки:

HI {{contact::first_name=testok}} and Tag value {{contact::last_name=okie}}

Поэтому в результате сопоставление с шаблоном должно возвращаться ниже двух строк:

{{contact::first_name=testok}}
{{contact::last_name=okie}} 

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

\{\{(contact|custom)::[_a-zA-Z0-9]+=?.*\}\}

, но приведенный выше шаблон регулярного выражения возвращается, как это

{{contact::first_name=testok}} and Tag value {{contact::last_name=okie}}

Любое решение длядостичь этого.

Ответы [ 4 ]

0 голосов
/ 19 марта 2019

Вы можете использовать рекурсивный шаблон: {{.*?(\1)*.*?}}

Пояснение:

.*? - захватить ноль или более вхождений любого персонажа (не жадного)

(\1)* - снова сопоставить весь шаблон (ноль или более раз)

Демо

0 голосов
/ 19 марта 2019

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

String input = "HI {{contact::first_name=testok}} and Tag value {{contact::last_name=okie}}";
//                           | escaped curly bracket * 2
//                           |     | reluctant quantifier for any character 1+ occurrence
//                           |     |  | closing curlies
//                           |     |  | 
Pattern p = Pattern.compile("\\{\\{.+?\\}\\}");
Matcher m = p.matcher(input);
while (m.find()) {
    System.out.printf("Found: %s%n", m.group());
}

выход

Found: {{contact::first_name=testok}}
Found: {{contact::last_name=okie}}
0 голосов
/ 19 марта 2019

Вы можете использовать следующее:

Pattern p = Pattern.compile("\\{\\{(.*?)\\}\\}");
Matcher m = p.matcher("HI {{contact::first_name=testok}} and Tag value {{contact::last_name=okie}}");

while (m.find()) {
    System.out.println(m.group());
}

Объяснение регулярного выражения можно найти здесь .

0 голосов
/ 19 марта 2019

попробуйте этот шаблон (\{\{.*?\}\})

здесь Демо

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