java正则表达式(八)
2012-10-23 21:12
246 查看
八、分组
我们已经提到了怎么重复单个元素(直接在元素后面加上限定符就可以了),如果要重复多个元素该怎么办?你可以用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式重复的次数了。
在正则表达式中,被小括号括起来的子表达式称为捕获组,正则表达式在求值期间将保存匹配这些捕获组表达式的输入子序列。一旦完全匹配操作完成,这些保存的代码片断可通过确定相应的组号从 Matcher对象上重新获取。捕获组可以嵌套使用,数量可以通过从左到右计算左括弧(开括号)得到。无论整个表达式是否有子组,它的捕获组总能记为组零(group zero)。例如,正则表达式 A((B)(C(D)))可能有的捕获组编号如下所示:
A((B)(C(D))) 的正则表达式捕获组
组号 表达式组
0 A((B)(C(D)))
1 ((B)(C(D)))
2 (B)
3 (C(D))
4 (D)
代码示例如下:
我们已经提到了怎么重复单个元素(直接在元素后面加上限定符就可以了),如果要重复多个元素该怎么办?你可以用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式重复的次数了。
在正则表达式中,被小括号括起来的子表达式称为捕获组,正则表达式在求值期间将保存匹配这些捕获组表达式的输入子序列。一旦完全匹配操作完成,这些保存的代码片断可通过确定相应的组号从 Matcher对象上重新获取。捕获组可以嵌套使用,数量可以通过从左到右计算左括弧(开括号)得到。无论整个表达式是否有子组,它的捕获组总能记为组零(group zero)。例如,正则表达式 A((B)(C(D)))可能有的捕获组编号如下所示:
A((B)(C(D))) 的正则表达式捕获组
组号 表达式组
0 A((B)(C(D)))
1 ((B)(C(D)))
2 (B)
3 (C(D))
4 (D)
代码示例如下:
public class RegExp { private Pattern patt; private Matcher matcher; private String regExpValue(String regStr,String regex){ String value=""; patt=Pattern.compile(regex); matcher=patt.matcher(regStr); while(matcher.find()){ value=matcher.group(1).trim(); break; } return value; } } public class TestRegExp { public static void main(String[] args) { RegExp re=new RegExp(); boolean wildcard_Res=false; String logEntry="256.275.285.295 - - [26/Feb/2001:10:56:03 -0500] GET /IsAlive.htm HTTP/1.0\\ 200 15"; String regex="(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}).+?"; String value=re.regValue(logEntry, regex); System.out.println(value); //value= 256.275.285.295 } }