2013-05-27 60 views
1

我想在java中的字符串中找到模式。下面是代码写为 -java查找()总是返回true

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。任何输入或想法,我错了。?

+0

i tihnk?意味着零个或更多以前的charachter? – Biscuit128

+0

正如答案中提到的那样:你应用'?'量词,意思是“零或1”,前面的原子;因此,正则表达式总是匹配。它理论上可以经历一个无限循环,但是因为Java的正则表达式引擎足够聪明,所以如果正则表达式匹配是空字符串,就会右移1。 – fge

回答

9

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

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

+1

*只是ASCII中的字母 – yshavit

8

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

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)); 
+0

OP正在寻找验证字符串是二进制的,这将允许任何数字 –