我有这段小代码
String[] words = {"{apf","hum_","dkoe","12f"};
for(String s:words)
{
if(s.matches("[a-z]"))
{
System.out.println(s);
}
}
Run Code Online (Sandbox Code Playgroud)
打算打印
dkoe
Run Code Online (Sandbox Code Playgroud)
但它什么都没打印!!
fge*_*fge 302
欢迎使用Java的错误名称.matches()
方法...它尝试并匹配所有输入.不幸的是,其他语言也纷纷效仿:(
如果要查看正则表达式是否与输入文本匹配,请使用a Pattern
,a Matcher
和.find()
匹配器的方法:
Pattern p = Pattern.compile("[a-z]");
Matcher m = p.matcher(inputstring);
if (m.find())
// match
Run Code Online (Sandbox Code Playgroud)
如果你想要的确是看输入只有小写字母,你可以使用.matches()
,但你需要匹配一个或多个字符:将a附加+
到你的角色类,如[a-z]+
.或者使用^[a-z]+$
和.find()
.
dog*_*ane 40
[a-z]
匹配a 和z之间的单个 char.因此,如果您的字符串只是"d"
,例如,那么它将匹配并打印出来.
您需要将正则表达式更改[a-z]+
为匹配一个或多个字符.
Hac*_*chi 16
java的正则表达式的实现尝试匹配整个字符串
这与试图找到匹配部分的perl正则表达式不同
如果要查找只包含小写字符的字符串,请使用该模式 [a-z]+
如果要查找包含至少一个小写字符的字符串,请使用该模式 .*[a-z].*
用过的
String[] words = {"{apf","hum_","dkoe","12f"};
for(String s:words)
{
if(s.matches("[a-z]+"))
{
System.out.println(s);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我曾经遇到过同样的问题:
Pattern ptr = Pattern.compile("^[a-zA-Z][\\']?[a-zA-Z\\s]+$");
Run Code Online (Sandbox Code Playgroud)
以上失败!
Pattern ptr = Pattern.compile("(^[a-zA-Z][\\']?[a-zA-Z\\s]+$)");
Run Code Online (Sandbox Code Playgroud)
以上适用于(
and内的模式)
。