开发者

Regex for a non-greedy match

I've a String template which I need to process using regex. I need to get the list of #condition #en开发者_运维百科dcondition blocks from the below template. I tried the following regular expression

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

But the below code

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

The above system out prints everything from first #condition to last #endcondition. But I need to get two blocks. ie first matcher.find() should find the first #if - #endif block and second matcher.find() should find the second #condition-#endcondition.


The easiest way to do this is to use a lazy quantifier:

"#if(.*?)#endif"

Also # is not a regex metacharacter so you don't need to escape it.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜