java find()总是返回true

时间:2013-05-27 17:45:21

标签: java regex

我试图在java中的字符串中找到一个模式。下面是代码 -

 String line = "10011011001;0110,1001,1001,0,10,11";

 String regex ="[A-Za-z]?"; //[A-Za-z2-9\W]?
 //create a pattern obj
 Pattern p = Pattern.compile(regex);
 Matcher m = p.matcher(line);
 boolean a = m.find();
 System.out.println("The value of a is::"+a +" asdsd "+m.group(0));

我期望布尔值为false,但它始终返回true。我出错的任何输入或想法。?

3 个答案:

答案 0 :(得分:10)

?使整个字符组可选。所以你的正则表达式基本上意味着“找到任何字符 * ......或不是”。而“或不”部分意味着它匹配空字符串。

*不是真的“任何”,只是用ASCII表示的那些字符。

答案 1 :(得分:8)

[A-Za-z]?表示“零或一个字母”。它总是匹配字符串中的某个地方;即使没有任何字母,它也会匹配零。

答案 2 :(得分:1)

 The below regex should work;
[A-Za-z]?-----> once or not at all
 Reference :
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html


    String line = "10011011001;0110,1001,1001,0,10,11";

     String regex ="[A-Za-z]";// to find letter
     String regex ="[A-Za-z]+$";// to find last string..
     String regex ="[^0-9,;]";//means non digits and , ;


     //create a pattern obj
     Pattern p = Pattern.compile(regex);
     Matcher m = p.matcher(line);
     boolean a = m.find();
     System.out.println("The value of a is::"+a +" asdsd "+m.group(0));