日期:2014-05-20  浏览次数:20660 次

对正则表达式中包含*的,如何使用分组?? 请各位高手指教! 谢谢~~
需要匹配的字符串:"       入局局向     安庆关口                   安庆S1240               "
正则表达式:"\s+入局局向\s{2}(\S+\s+)*"

因为正则表达式中包含*,所以可以循环匹配"安庆关口"和"安庆S1240",但是我想用group把它们分别取出来:
group(0)毫无疑义:       入局局向     安庆关口                   安庆S1240              
group(1)是循环匹配的最后一个:"安庆S1240"
group(2)异常


我想请教各位高手,有什么方法可以把"安庆关口"和"安庆S1240"用分组的方式都取出来.谢谢~~~

------解决方案--------------------
你上面的正则表达式只匹配了 "安庆s1240 ",所以 只能打印出一个group

试试这个,
String str=" 入局局向 安庆关口 安庆S1240 ";
String pat= "\\s+入局局向\\s+(.*?)\\s+(.*?)\\s+ ";
Matcher m=Pattern.compile(pat).matcher(str);
while(m.find()){
System.out.println(m.group(0));
System.out.println(m.group(1));
System.out.println(m.group(2));
}
------解决方案--------------------
group(int i):
当i=0,表示整个匹配串;
当i> 0,表示匹配到的第i的串。

lz的意思是不是字串中含有*这个字符,那你加上转义符就可以了\\*
------解决方案--------------------
正则表达式:(\s+入局局向)\s{2}(\S+\s+)(\S+\s+)
结果:Group0: 入局局向 安庆关口 安庆S1240
Group1: 入局局向
Group2:安庆关口
Group3:安庆S1240
一个括号代表一个Group~~~~~~~