我有一小段代码
String[] words = {"{apf","hum_","dkoe","12f"};
for(String s:words)
{
if(s.matches("[a-z]"))
{
System.out.println(s);
}
}
打算打印
dkoe
但它没有打印!!
答案 0 :(得分:277)
欢迎使用Java的错误名称.matches()
方法...它尝试并匹配所有输入。不幸的是,其他语言也纷纷效仿:(
如果您想查看正则表达式是否与输入文字匹配,请使用匹配器的Pattern
,Matcher
和.find()
方法:
Pattern p = Pattern.compile("[a-z]");
Matcher m = p.matcher(inputstring);
if (m.find())
// match
如果你想要的确是输入只有小写字母,你可以使用.matches()
,但是你需要匹配一个或多个字符:在你的角色类附加一个+
,与[a-z]+
中一样。或者使用^[a-z]+$
和.find()
。
答案 1 :(得分:34)
[a-z]
匹配a和z之间的单个字符。因此,如果您的字符串只是"d"
,那么它就会匹配并打印出来。
您需要将正则表达式更改为[a-z]+
以匹配一个或多个字符。
答案 2 :(得分:18)
String.matches
返回整个字符串是否与正则表达式匹配,而不仅仅是任何子字符串。
答案 3 :(得分:16)
java的正则表达式的实现尝试匹配整个字符串
这与perl正则表达式不同,它试图找到匹配的部分
如果要查找只包含小写字符的字符串,请使用模式[a-z]+
如果要查找包含至少一个小写字符的字符串,请使用模式.*[a-z].*
答案 4 :(得分:8)
用于
String[] words = {"{apf","hum_","dkoe","12f"};
for(String s:words)
{
if(s.matches("[a-z]+"))
{
System.out.println(s);
}
}
答案 5 :(得分:4)
我曾遇到过同样的问题:
Pattern ptr = Pattern.compile("^[a-zA-Z][\\']?[a-zA-Z\\s]+$");
以上失败了!
Pattern ptr = Pattern.compile("(^[a-zA-Z][\\']?[a-zA-Z\\s]+$)");
上述内容适用于(
和)
内的模式。
答案 6 :(得分:1)
您的正则表达式[a-z]
与dkoe
不匹配,因为它只匹配长度为1的字符串。请使用[a-z]+
之类的内容。
答案 7 :(得分:-1)
您必须在模式中至少放置一个捕获()
才能匹配,并像这样纠正模式:
String[] words = {"{apf","hum_","dkoe","12f"};
for(String s:words)
{
if(s.matches("(^[a-z]+$)"))
{
System.out.println(s);
}
}
答案 8 :(得分:-3)
您可以通过执行以下操作来使您的模式不区分大小写:
Pattern p = Pattern.compile("[a-z]+", Pattern.CASE_INSENSITIVE);