日期:2014-05-20  浏览次数:20907 次

java正则表达式String.matches有BUG!
string.matches("(.|\\s)*?测 试(.|\\s)*?");
如果匹配的话,马上就有结果返回,反之,就死在那!
string.indexof("测 试")>=0是不会有问题的

------解决方案--------------------
Java code
  public static void main(String[] args) {
    String string = " 测   试 ";
    System.out.println(string.matches("(.|\\s)*?测  试(.|\\s)*?"));
  }

------解决方案--------------------
这个不是bug!

楼主应该从计算复杂度上思考这个问题。你知道匹配"*"的实际操作是不断的回溯吗?这个计算复杂度是很大的。
------解决方案--------------------
使用正则表达式的效率本身就比直接使用字符串方法的效率低,
像这个完全可以采用indexOf方法。

正则表达式主要完成一些较为复杂的模式匹配,就是采用基本
的字符串方法不易实现的匹配。比如像E-mail验证,若采用
字符串分析的话会是非常麻烦的,所以一般就采用正则表达式
来做。

想想可能大家对正则表达式的认识存在一定的误区了,当正则
表达式是无所不能的了。像我在这里曾经看到过用正则表达式
来匹配日期,这个也就算了,竟然还有要让正则表达式来匹配
麻将糊牌什么的。像匹配日期这种,日期的算法本身就是很复
杂,有闰年平年什么的,有得去写一个这样的正则表达式,还
不如直接采用字符串分析来得快一些。
------解决方案--------------------
参照
http://topic.csdn.net/u/20071214/17/ccc42222-6c64-4893-a191-d6f779d9067f.html