Regex для не жадного совпадения - PullRequest
0 голосов
/ 29 сентября 2010

У меня есть шаблон String, который мне нужно обработать с помощью регулярных выражений.Мне нужно получить список #condition #endcondition блоков из шаблона ниже.Я попробовал следующее регулярное выражение

String condition="\\#condition(.*)\\#endcondition";

Но приведенный ниже код

Pattern pattern=Pattern.compile( condition,Pattern.DOTALL);
Matcher matcher=pattern.matcher( template );
while(matcher.find()){
  System.out.println("Found a match:[" + matcher.group()+"]");
}

Вышеуказанная система выводит все от первого #condition до последнего #endconditionНо мне нужно получить два блока.то есть первый matcher.find() должен найти первый #if - #endif блок, а второй matcher.find() должен найти второй #condition-#endcondition.

1 Ответ

3 голосов
/ 29 сентября 2010

Самый простой способ сделать это - использовать ленивый квантификатор:

"#if(.*?)#endif"

Также # не является метасимволом регулярных выражений, поэтому вам не нужно избегать его.

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