需要匹配的字符串:" 入局局向 安庆关口 安庆S1240 "
正则表达式:"\s+入局局向\s{2}(\S+\s+)*"因为正则表达式中包含*,所以可以循环匹配"安庆关口"和"安庆S1240",但是我想用group把它们分别取出来:
group(0)毫无疑义: 入局局向 安庆关口 安庆S1240
group(1)是循环匹配的最后一个:"安庆S1240"
group(2)异常
我想请教各位高手,有什么方法可以把"安庆关口"和"安庆S1240"用分组的方式都取出来.谢谢~~~
正则表达式:"\s+入局局向\s{2}(\S+\s+)*"因为正则表达式中包含*,所以可以循环匹配"安庆关口"和"安庆S1240",但是我想用group把它们分别取出来:
group(0)毫无疑义: 入局局向 安庆关口 安庆S1240
group(1)是循环匹配的最后一个:"安庆S1240"
group(2)异常
我想请教各位高手,有什么方法可以把"安庆关口"和"安庆S1240"用分组的方式都取出来.谢谢~~~
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));
}
安庆S1240 ,因此又把前面匹配的覆盖掉了,所以最后 group(0)里只有 "安庆S1240"用这个 String pat="\\s+安庆关口\\s{2}(\\S+\\s+)(\\S+\\s+)";
试下,你就知道了,
谢谢您的回复!
我明白您的编程意思,但是我必须在正则表达式中使用"*",或许正像您说的每一次匹配把以前的内容覆盖掉了,所以我想问问有没有什么办法把中间结果记录下来.
也就是说,是用"*"循环匹配"安庆关口"和"安庆S1240"的,如何用group把所有匹配的分别取出来?
当i=0,表示整个匹配串;
当i>0,表示匹配到的第i的串。lz的意思是不是字串中含有*这个字符,那你加上转义符就可以了\\*
结果:Group0: 入局局向 安庆关口 安庆S1240
Group1: 入局局向
Group2:安庆关口
Group3:安庆S1240
一个括号代表一个Group~~~~~~~