1

我试图在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));

我期望布尔值是假的,但它总是返回为真。任何输入或想法我哪里出错了。?

4

3 回答 3

10

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

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

于 2013-05-27T17:46:49.857 回答
8

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

于 2013-05-27T17:46:46.667 回答
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));
于 2013-05-27T18:58:16.993 回答