Pattern p = Pattern.compile("(?!=e).{3,5}?");
Matcher m = p.matcher("love52000");
while(m.find()){
System.out.println(m.group());
}
为什么会输出lov e52 000 而不是lov 520 00printContent("i love you".matches("^i\\b\\w*\\b.*you$"));输出true
printContent("i love you".matches("^i\\b\\w*\\b\\w*you$"));输出false
这两个表达式的结果为什么不一样
Matcher m = p.matcher("love52000");
while(m.find()){
System.out.println(m.group());
}
为什么会输出lov e52 000 而不是lov 520 00printContent("i love you".matches("^i\\b\\w*\\b.*you$"));输出true
printContent("i love you".matches("^i\\b\\w*\\b\\w*you$"));输出false
这两个表达式的结果为什么不一样
解决方案 »
- SSH优点缺点?(面试题)
- 求 网络系统开发实例精粹 jsp 代码
- 奇怪啦,Spring+struts的LoginAction居然不执行!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 可不可以在java的应用程序里,点一个按钮即链接打开一个网页?如一个按钮,点击,即打开ie,网址http://www.csdn.net?
- 再问:有谁会在axis中实现soap消息的加密和解密来实现安全的web service
- 我ABC汉DEF
- 在线等待!DukeBank银行问题 在登陆logon.jsp时关于j_security_check的问题!
- 找人帮忙看套大项目源码(限北京)
- 疑问:CMP中的EJB_QL是不是太弱啦?
- 怎么制作自己的按钮?
- java里,如何保证高并发下的数据安全?
- struts2 action流形式读文件显示
(?=表示 肯定的look ahead(?!=e,对java来讲,只能理解为找一个位置,这个位置的后面不是"=e",
这样,从第一个位置就是匹配的,所以.{3,5}就在每三个字符的地方生效了。我估计你的意思是想表达:(?!e).{3,5}?
但即便按照这个想法,也会输出:lov 520,而没有后面的00。第二个问题暂时不懂,研究一下。
所以,如果我们将"^i\\b\\w*\\b.*you$"
改造成:"^i(\\b)(\\w*)(\\b)(.*)you$"
我们会发现:
前三个Group什么都没有匹配,而.*匹配了" love "
有此可以推断,到第二个\\b的时候,其实什么都没有匹配,
所以:
printContent("i love you".matches("^i\\b\\w*\\b\\w*you$"));
到第二个\\w时,实际上才匹配到i后面,这样,其中包含空白字符,自然不能满足\\w*的要求。