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

4

3 回答 3

7

String#matches()this针对整个模式测试字符串。让我们沿着 JavaDoc 路线走一趟:

字符串#匹配(字符串)

判断此字符串是否与给定的正则表达式匹配。

以str.matches ( regex )形式调用此方法会产生与表达式完全相同的结果

Pattern.matches(正则表达式, str )

所以让我们追踪它:

Pattern#matches(字符串正则表达式,CharSequence 输入)

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

调用表单的这种便捷方法

Pattern.matches(regex, input);

行为方式与表达式完全相同

Pattern.compile(regex).matcher(input).matches()

最后一步:

匹配器#matches()

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

你去吧。String#matches(String)当然,从 JavaDoc 中看不出来。当然,解决方案是使用一种不坚持将模式与整个字符串匹配的方法。

于 2013-08-31T04:33:28.997 回答
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 ]+")); 
于 2013-08-31T04:33:50.507 回答
1

您的regex表达式不包含空格,请解释第二个返回的原因false

于 2013-08-31T04:36:28.790 回答