正则表达式非贪婪模式的应用

来源:互联网 发布:moeloader 类似软件 编辑:程序博客网 时间:2024/05/14 02:45

贪婪模式又叫匹配优先模式,在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式恰恰相反,在整个表达式匹配成功的前提下,尽可能少的匹配,针对的量词包括:

{m, n}{m, }?*+

从书写正则表达式的差异来看,它们的唯一区别在于非贪婪模式在贪婪模式的量词后面添加“?”,如下:

{m, n}?{m, }???*?+?

下面看一个具体的例子,从“[]”提取需要的字符,首先是贪婪模式:

//  需要提取的字符串String str = "[DTools]              [logs]                [Program Files]";//  因为是贪婪模式,所以要以[^\\]]寻找字符边界Pattern pat = Pattern.compile("\\[([^\\]]+)\\]");Matcher matcher = pat.matcher(str);while(matcher.find()) {    //  group(0)为匹配的字符串    System.out.println(matcher.group(1));}

因为是贪婪模式,所以我们必须找出明确的字符边界,所以要以“[^\]]”进行界定,如果采用非贪婪模式,则可以简化此操作,如下:

Pattern pat = Pattern.compile("\\[(.+?)\\]");

可见,使用非贪婪模式,可以简化正则表达式的复杂程度。

结论

充分理解贪婪模式与非贪婪模式的差异,可以更有效地使用正则表达式。

原创粉丝点击