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的正则表达式系统有点像但不是吗?不知道。
答案 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
。