class Regex2 {
public static void main(String[] args) {
Pattern p = Pattern.compile(args[0]);
Matcher m = p.matcher(args[1]);
boolean b = false;
while(b = m.find()) {
System.out.print(m.start() + m.group());
}
}
}
And the command line:
java Regex2 "\d*" ab34ef
输出结果为:01234456
为什么
13 个解决方案
#1
java Regex2 "\d*" ab34ef
在你的输入参数中,"\d*" 应该是"\\d*"
在你的输入参数中,"\d*" 应该是"\\d*"
#2
其实你把
System.out.print(m.start() + m.group());
修改成
System.out.println(m.start() +"-"+m.group()+"-");
就好像可以看出其原因了。
修改之后的输出变成了:
0--
1--
2-34-
4--
5--
6--
我们一行一行解释吧:
\d*表示什么意思呢?表示不含或者含有不确定个数的数字。
第1个输出0,表示输入串中的第1个字符位置,没有数字,故输出位置0;
第2个输出1,表示输入串中的第2个字符位置,没有数字,故输出位置1;
第3个输出234,表示输入串中的第3个字符位置,有数字,且跟随1个数字,故输出位置2,以及两位数字34即234;
第4个输出4,表示输入串中的第5个字符位置,没数字,故输出位置4;
第5个输出5,表示输入串中的第6个字符位置,没数字,故输出位置5;
哈哈,最后一个我也不知道解释了。
按楼主的意思,好像应该将第一个输入改成"\d+"
System.out.print(m.start() + m.group());
修改成
System.out.println(m.start() +"-"+m.group()+"-");
就好像可以看出其原因了。
修改之后的输出变成了:
0--
1--
2-34-
4--
5--
6--
我们一行一行解释吧:
\d*表示什么意思呢?表示不含或者含有不确定个数的数字。
第1个输出0,表示输入串中的第1个字符位置,没有数字,故输出位置0;
第2个输出1,表示输入串中的第2个字符位置,没有数字,故输出位置1;
第3个输出234,表示输入串中的第3个字符位置,有数字,且跟随1个数字,故输出位置2,以及两位数字34即234;
第4个输出4,表示输入串中的第5个字符位置,没数字,故输出位置4;
第5个输出5,表示输入串中的第6个字符位置,没数字,故输出位置5;
哈哈,最后一个我也不知道解释了。
按楼主的意思,好像应该将第一个输入改成"\d+"
#3
1楼,你测试了吗?就那么说?楼主的输入"\d*"中一个斜杠是正确的。除非要表示数字前还有一个斜杠,否则不应该用两个斜杠
#4
Partten.compile("\\d"); //这种情况下必须这样写,命令行下随OS而定
#5
程序里面调用Partten.compile方法直接写入正则表达式时肯定是需要用双杆的,但如果是命令行传入参数就不需要了,编译器自己会识别的。
#6
*代表零个或多个,也就是要找零个或多个的那个组,并打印他的start,
find会在整个输入中寻找是否有匹配的子字符串,如果只为真,才会有start end 之类的方法
楼主的group是默认的group(0)的形式,满足外大括号条件分为一组。才会有34同时输出。
最后一个我也不知道解释了,不知道哪位高人指点一下。关注中。。
#7
最重要的是6是怎么输出的,至于“\d”没有任何问题
#8
呵呵,又长知识了!!
#9
自己搞明白啦,这是正则表达式的无内容匹配,zero-length match 零长度匹配
#10
#11
#12
empty string match!
#13
貌似没有见过matcher
#1
java Regex2 "\d*" ab34ef
在你的输入参数中,"\d*" 应该是"\\d*"
在你的输入参数中,"\d*" 应该是"\\d*"
#2
其实你把
System.out.print(m.start() + m.group());
修改成
System.out.println(m.start() +"-"+m.group()+"-");
就好像可以看出其原因了。
修改之后的输出变成了:
0--
1--
2-34-
4--
5--
6--
我们一行一行解释吧:
\d*表示什么意思呢?表示不含或者含有不确定个数的数字。
第1个输出0,表示输入串中的第1个字符位置,没有数字,故输出位置0;
第2个输出1,表示输入串中的第2个字符位置,没有数字,故输出位置1;
第3个输出234,表示输入串中的第3个字符位置,有数字,且跟随1个数字,故输出位置2,以及两位数字34即234;
第4个输出4,表示输入串中的第5个字符位置,没数字,故输出位置4;
第5个输出5,表示输入串中的第6个字符位置,没数字,故输出位置5;
哈哈,最后一个我也不知道解释了。
按楼主的意思,好像应该将第一个输入改成"\d+"
System.out.print(m.start() + m.group());
修改成
System.out.println(m.start() +"-"+m.group()+"-");
就好像可以看出其原因了。
修改之后的输出变成了:
0--
1--
2-34-
4--
5--
6--
我们一行一行解释吧:
\d*表示什么意思呢?表示不含或者含有不确定个数的数字。
第1个输出0,表示输入串中的第1个字符位置,没有数字,故输出位置0;
第2个输出1,表示输入串中的第2个字符位置,没有数字,故输出位置1;
第3个输出234,表示输入串中的第3个字符位置,有数字,且跟随1个数字,故输出位置2,以及两位数字34即234;
第4个输出4,表示输入串中的第5个字符位置,没数字,故输出位置4;
第5个输出5,表示输入串中的第6个字符位置,没数字,故输出位置5;
哈哈,最后一个我也不知道解释了。
按楼主的意思,好像应该将第一个输入改成"\d+"
#3
1楼,你测试了吗?就那么说?楼主的输入"\d*"中一个斜杠是正确的。除非要表示数字前还有一个斜杠,否则不应该用两个斜杠
#4
Partten.compile("\\d"); //这种情况下必须这样写,命令行下随OS而定
#5
程序里面调用Partten.compile方法直接写入正则表达式时肯定是需要用双杆的,但如果是命令行传入参数就不需要了,编译器自己会识别的。
#6
*代表零个或多个,也就是要找零个或多个的那个组,并打印他的start,
find会在整个输入中寻找是否有匹配的子字符串,如果只为真,才会有start end 之类的方法
楼主的group是默认的group(0)的形式,满足外大括号条件分为一组。才会有34同时输出。
最后一个我也不知道解释了,不知道哪位高人指点一下。关注中。。
#7
最重要的是6是怎么输出的,至于“\d”没有任何问题
#8
呵呵,又长知识了!!
#9
自己搞明白啦,这是正则表达式的无内容匹配,zero-length match 零长度匹配
#10
#11
#12
empty string match!
#13
貌似没有见过matcher