java正则表达式到底是什么?我完全误读了正则表达式文档吗?

时间:2013-08-31 04:30:55

标签: java regex

System.out.println("a".matches("^[A-Za-z]+"));
System.out.println("a ".matches("^[A-Za-z]+"));

这给了我:

true
false

到底是什么?据我所知,“[A-Za-z]”包括“a”,“+”表示一个或多个,所以这似乎可以起作用,至少在这个宇宙中......

详情如下:

Mac OS X 10.8.4

$ java -version
java version "1.6.0_51"
Java(TM) SE Runtime Environment (build 1.6.0_51-b11-457-11M4509)
Java HotSpot(TM) 64-Bit Server VM (build 20.51-b01-457, mixed mode)

也许我写的perl太长了,java的正则表达式系统有点像但不是吗?不知道。

3 个答案:

答案 0 :(得分:7)

String#matches()针对整个模式测试this字符串。让我们沿着JavaDoc车道旅行:

  

String#matches(String)

     

判断此字符串是否与给定的regular expression匹配。

     

调用 str .matches regex )形式的此方法会产生与表达式

完全相同的结果      

Pattern.matches正则表达式 str

所以让我们来看看:

  

Pattern#matches(String regex, CharSequence input)

     

编译给定的正则表达式并尝试将给定的输入与其匹配。

     

调用

形式的便捷方法
Pattern.matches(regex, input);
     

的行为方式与表达式

完全相同
Pattern.compile(regex).matcher(input).matches()

最后一步:

  

Matcher#matches()

     

尝试将整个区域与模式匹配。

你去吧。当然,String#matches(String) JavaDoc并不明显。当然,解决方案是使用a method which does not insist on matching the pattern to the entire string.

答案 1 :(得分:2)

System.out.println("a".matches("^[A-Za-z]+"));   //No space after "a" hence returning true
System.out.println("a ".matches("^[A-Za-z]+"));   //One space after "a" hence returning false

如果要包含空格字符,请将第二个更改为: -

System.out.println("a ".matches("^[A-Za-z ]+")); 

答案 2 :(得分:1)

您的regex表达式不包含空格,因此第二个表达式返回false