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

JAVA正则表达式中的一个奇怪的现象,求大神解释~~
我在一段程序中 需要正则表达式 来匹配
+-*/  这4个符号。但是其中碰到了一个很奇怪的现象。
以下是一个测试代码~

public class TestRegex {
public static void main(String[] args) {
String str = "/"; // 随意填的用来测试
if(str.matches("[+-*/]")) { //这里编译会出现错误, 即使把* 改成\\* 同样会出错。
//
System.out.println(str);
}

/* if(str.matches("[+-/*]")) { //这里把* 放在/后面,编译就不会出现错误~
//
System.out.println(str);
}
*/ }
}

刚接触正则不久,感觉这两句话没什么区别啊,为什么会一个出错一个不出错呢?? 
------解决方案--------------------
首先呢,你这编译是不会出错的,出错是在运行阶段报的异常;
其次说说你的这个运行时异常,"-"这个有特殊含义,表示连接符.
我做了个测试 ,  把-  和*  分开就没问题了如"[-+*/]"
------解决方案--------------------
在正则里+-*都是关键字.
+表示配匹前面字符至少一个以上,如a+,则可以匹配aa,aaa,aaaaa但是不能匹配a.
-表示连接符,如a-z,1-9,表示a到z所有小写字母都可以,1到9所有数字都可以.
*  表示0个或多个以上匹配,和+唯一区别就是,可以匹配0个.如a*,则可以匹配aa,aaa,aaaaa还可以匹配a.
/   不是关键字.
如果需要匹配上面的字符,则要加上转意字符\,如\\+,表示要匹配的字符+.