java正则表达式中的一些问题

从匹配项看来最后两个是false和true才对。为什么答案相反了?

兄弟,你试试我这个代码,或许你就能明白了。至于你说的00-123是这样的,因为你的Pattern是至少3个数字,而00只有两个,最开始到00位置来匹配时就不符合匹配,就提前将其过滤了,所以就直接到后面的123处去匹配了。

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-10-06
p();应该是public void p(Object o) {
System.out.println(o);
}

p(m.matches())是打印是否完全匹配,不是完全匹配所以返回false
m.reset();是重置匹配串的匹配位置,
p(m.find()) 是打印是否匹配到模式串,123符合,返回true,12345符合,返回true;123符合,返回true;再往下就再也匹配不到合适的了,所以返回false;追问

兄弟,你好像把顺序搞乱了。是00再到123,不是123再到00哦

追答

楼主没搞错的,是这样的,它开始匹配的时候默认采用的策略是 贪婪模式,就是按最长的匹配,所以首相匹配到了123是true,然后继续往后找,发现-不符合,就从-后面的1开始,到了5,发现遇到了-,不符合,所以就找到了12345是true,然后继续往后找,发现是-不符合,往后是00-,都不符合这个条件,继续往后,发现了123,符合所以输出true,再往后实在找不到了所以返回false

本回答被提问者和网友采纳
第2个回答  2012-10-06
第一次find匹配了123
第二次匹配了12345
第三次匹配了123
已经到头第四次没找到匹配。

java中的正则表达式一些问题
Pattern p=Pattern.compile("\\\\d{3,5}");定义一个表达式模式,’\\‘表示下一个字符是特殊字符,'\\d'表示数字既0-9,{3,5}表示重复3到5次 总的来看:匹配由3个到5个数字组成的字符串(例如”123“,”2345“等)。Matcher m=p.matcher("123-12546-1234-12");通过p和字符串"123-12546-...

关于Java正则表达式问题
正则表达式是用括号进行分组的。按左括号的从左到右依次计入组别。而(?:)这个就不计入分组中了。举例:上面的例子中加了?:后面的\\1就取不到第一个分组了所以就会出错。而?=则是另一种理解方式了,一般管这个叫前瞻(也叫正向预判)先看看(?=)这部分是否符合,如果不符合那么就不能匹配。

java中正则表达式中非捕获组的一些问题
2、求一个正则表达式的写法,可以匹配比如说:开始和结尾分别是dog和cat,但是中间位置上不能有pig ^dog((?!pig).)*cat

java中使用正则表达式替换字符串时转义符反斜杠'\\'异常问题
1. 第一层转义:Java 字符串中的反斜杠用于转义。表示一个字面意义上的反斜杠需写作 '\\ '。2. 第二层转义:正则表达式同样使用反斜杠作为转义字符。为将字面意义上的反斜杠传递给正则表达式,需再对每个反斜杠使用两个反斜杠,即'\\\\\\ '。解决策略不依赖于处理用户输入内容。直接使用正则表达式查找并...

java中正则表达式的问题 零宽断言的
split方法虽然是用正则表达式实现的,但不能这么用。另外这个零宽断言有问题,我改了一下,不知道是不是你想要的。程序如下:Pattern pattern = Pattern.compile("(?<=0x)\\\\d+|(?<=0X)\\\\d+");Matcher matcher = pattern.matcher(x);while (matcher.find()) {System.err.println(matcher.group...

java下面这个正则表达式为什么是这样匹配?
第一个问题。and|And\\b\\w+在你给的文本中只能匹配and,也就是说你的表达式只有前半部分生效了。原因有2:第一,你的表达式有两部分,and和AND\\b\\w+引擎首先用第一部分去对目标文本检索,如果不成功才会用第二部分。而引擎在15-18的位置第一部分发现了and字符串,就报告成功了,忽略了第二部分...

java正则表达式的问题
1)("1234".matches("123"));后面的123应该是只能是123的意思 2)^是开头的意思,.是任意一个字符,*是重复任意多次,所以"1.*" 表示1后面跟0个或任意多个字符,^1表示只能是1 大家一起学吧:正则表达式30分钟入门教程 http:\/\/deerchao.net\/tutorials\/regex\/regex.htm ...

java Matches正则表达式问题?
1 3^0 10 3^1 100 3^2 ...1...x个0 3^x 所以,如果3进制字符串能够匹配1后跟0个或多个0,就说明n是3的某次方。10*$就是匹配一个1后跟0个或多个0,然后是字符串结尾(用$来匹配)。表示匹配前面的模式0次或多次。表示匹配字符串的结尾。

java中的正则表达式问题 怎么验证密码必须由字母 数字或下划线开头...
正则表达式,最简单的写法就是:\\w+ 表示匹配 字母 数字 下划线 对于字符个数,至少要1个 java的完整代码,就不给你写了。因为之前给很多人,花了时间写了完整代码,结果 柏 渡 吗 壁 西 通 啦 机,直接就屏蔽了,导致无法发布内容了。你自己去写完整代码吧。

java正则表达式的问题,有一个时间字符串(yyyyMMdd),怎么判断他在一个...
你这个很简单,不需要转成long再比较,java.util.Date已经有after()、before()等方法来比较两个时间的先后顺序了。示例代码如下:\/** * 检测一个时间是否在一个时间区间之内 * @param start 有效的开始时间 * @param end 有效的结束时间 * @param check 待检测时间 * @return *\/public boolean ...

相似回答