System.out.println("love 300".matches("love (?=you|300)"));
System.out.println("love 123".matches("love (?!you|300)"));
为什么输出结果都是false
有高手指点下么。。谢谢!!
解决方案 »
- Java里面的封装是否和迪米特法则有冲突
- sql2005如何创建数据源
- 问一个多线程中阻塞的问题
- 高手请帮忙 求一个抽签算法
- jedit A BeanShell error occurred 使用jedit的朋友请进
- 北京诚聘架构师、java高级工程师
- 交友兼散分!!!
- 那个dtmark(锈芯箭)大侠,我已经成功的安装运行了JB6,但如何在安装BorlandEnterpriseServer5.0啊?,我过不了license关
- main()方法的疑问?
- 急!在http://www.bestdown.com/下载的JBUILDER4指南书籍该用什么阅读器阅读呀?
- 关于JNA结构返回值的问题。
- freemarker模板怎么打包到jar中?
?!
都是非捕获组,不能和love 300完全匹配。但可以部分匹配。
public class Test7 {
public static void main(String[] args){
String str="love 300";
String regex="love (?=you|300)";
Matcher mat=Pattern.compile(regex).matcher(str);
while(mat.find()){
System.out.println(mat.group());
} }
}
你运行一下这个程序,就可以看到匹配的结果了。
String.matches()方法要的完全匹配。非捕获组在匹配时,只作为匹配依据,不作为匹配的结果。
比如这个:"love (?=you|300)",匹配时,只匹配"love "并要求"love "之后是"you"或是"300"。
换句话说,这个正则只匹配后跟"you"或"300"的"love ".
所以 试试 love (?=you|300)300就可以明白我的意思了,如果想打印true.
love (you|300)应该可以满足你的要求
public class Test7 {
public static void main(String[] args){
String str="love 300";
String regex="love (?=you|300)";
Matcher mat=Pattern.compile(regex).matcher(str);
while(mat.find()){
System.out.println(mat.group());
} }
}
Stirng.matches要求完全匹配"you 300"
所以返回是false.
特别感谢bigbug9002