java 正则表达式问题?为什么总是false呢?

Pattern p = null; //正则表达式
Matcher m1 = null; //操作的字符串
p = Pattern.compile("^(WS[A-Z0-9]*)([(\r\n) ][A-Z0-9]+){3}[(\r\n) ](SIGMET).*",Pattern.DOTALL );
m1 = p.matcher("WS90\r\nLLOP KJK\r\nKTYU SIGMET hkjhk");
System.out.println( m1.matches());

问题在这 [(\r\n) ] ,你表达的意思应该是\r\n或者空格,但是[(\r\n) ]这样写是不对的,中括号中的小括号没有起到小括号的作用,改为(\r\n| )就可以了

Pattern p = null; //正则表达式
Matcher m1 = null; //操作的字符串
p = Pattern.compile("^(WS[A-Z0-9]*)((\r\n| )[A-Z0-9]+){3}(\r\n| )(SIGMET).*",Pattern.DOTALL );
m1 = p.matcher("WS90\r\nLLOP KJK\r\nKTYU SIGMET hkjhk");
System.out.println( m1.matches());
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-09
首先你的{3}是对([(\r\n) ][A-Z0-9]+)取3次,明显你下面的字符串不匹配,当然是false了,还有,你写的正则是在字符串模式下,需要转义,如果你想要下面的字符串返回true,那应该这样写:
^WS[A-Z0-9]*(\\r\\n[A-Z0-9\s]+){1,}SIGMET.*
相似回答