9

我试过这样但它输出错误,请帮助我

String inputString1 = "dfgh";// but not dFgH
String regex = "[a-z]";
boolean result;

Pattern pattern1 = Pattern.compile(regex);
Matcher matcher1 = pattern1.matcher(inputString1);
result = matcher1.matches();
System.out.println(result);
4

5 回答 5

21

您的解决方案几乎是正确的。正则表达式必须说 —"[a-z]+"包含一个量词,这意味着您匹配的不是单个字符,而是一个或多个小写字符。请注意,与Unicode 中的任何小写字符匹配的超级正确解决方案是:

"\\p{javaLowerCase}+"

另外请注意,您可以使用更少的代码来实现这一点:

System.out.println(input.matches("\\p{javaLowerCase}*"));

(这里我交替使用 * 量词,表示零或多个。根据所需的语义进行选择。)

于 2012-11-13T17:24:52.157 回答
5

你快到了,除了你只检查一个字符。

String regex = "[a-z]+";

上面的正则表达式将检查输入字符串是否包含任意数量的a字符z

阅读有关如何在正则表达式中使用量词的信息

于 2012-11-13T17:24:45.970 回答
3

使用这种模式:

String regex = "[a-z]*";

只有当测试的字符串只有一个字符时,您当前的模式才有效。

请注意,它完全按照它的样子:它并没有真正测试字符串是否为小写,但它是否不包含外部字符[a-z]。这意味着它对于像"àbcd". Unicode 世界中的正确解决方案是使用Character.isLowercase()函数并遍历字符串。

于 2012-11-13T17:24:55.183 回答
2

它应该是

^[a-z]+$

^是字符串的开头

$是字符串的结尾

[a-z]+匹配 1 到多个小字符

You need to use quantifies like * which matches 0 to many chars,+ which matches 1 to many chars..They would matches 0 or 1 to many times of the preceding character or range

于 2012-11-13T17:25:59.283 回答
0

Why bother with a regular expression ?

String inputString1 = "dfgh";// but not dFgH
boolean result = inputString1.toLowerCase().equals( inputString1 );
于 2012-11-13T17:39:06.220 回答