Java正则表达式匹配错误

Java正则表达式匹配错误,java,regex,Java,Regex,我正在尝试以下部分,但没有结果: public class test { public static void main(String args[] ){ String password = "s8bgBQYPmUaNjkToXCJLAwAA"; System.out.println( Pattern.matches("[0-9]", password )); } } 我希望它能起作用,因为我只是寻找任何数字的匹配来满足正则表达式的要求,但我的

我正在尝试以下部分,但没有结果:

 public class test {

    public static void main(String args[] ){

       String password = "s8bgBQYPmUaNjkToXCJLAwAA";
       System.out.println( Pattern.matches("[0-9]", password ));

   }
}


我希望它能起作用,因为我只是寻找任何数字的匹配来满足正则表达式的要求,但我的输出总是返回false。非常感谢您对我可能遗漏的内容或可能出错的内容的任何帮助。

您正在检查整个字符串是否由一个单个数字组成。你真正的意思是:

System.out.println( Pattern.matches(".*[0-9].*", password ));

*
添加到开始和结束可以匹配任意数量的其他字符(
表示“任意字符”,而
*
表示“任意次数”)。

您可能希望也可能不希望使用[A-z]代替。如果您不希望它匹配特殊字符。我不是一个java爱好者,所以java中正则表达式的细节最好通过以下方式体现出来:

如果您经常在循环中执行这种类型的字符查询,您可能根本不想使用正则表达式,而是自己设计查询StringBuffer的搜索例程

/**
* Method to evaluate a String to see whether it contains one (or potentially more) of a 
* char or member of a group of chars.
*
* @param String to evaluate
*
* @param String containing all characters to evaluate against the subject string
*
* @return true on first correct match, false if no match found
**/

public boolean sbContainsOneOf(String sStringToCheck, String sCheck)
{
StringBuffer sb = new StringBuffer(sStringToCheck);

char[] tmp2 = sCheck.toCharArray();

for (int i = 0; i < sb.length(); i++)
    {

    for (int k = 0; k < tmp2.length; k++)
    if (sb.charAt(i) == tmp2[k])
        {
            return true;
        }

    }
return false;
}

这样做的速度要快10到15倍。。。。字符串和选项列表越长,两者之间的差异就越大。通常我避免使用regexp,除非它们是一次性的或者作为代码实现起来非常复杂,并且更喜欢使用优化的基于StringBuffer的例程来表示它们。这样做,您的regexp替换集合将逐渐填满,最终您将得到一种非常有用的模式查询方法,而不会产生大量相关的regexp开销。

您真的打算编写
[a-z]
(大写
a
,小写
z
)?这几乎肯定是一个错误,不管您使用的是什么正则表达式。你到底在跟谁说话?我怀疑这应该是对@mmyers的回答的评论,而不是其本身的回答。同意,为不只是评论而道歉。是的,我的意思是限制Z。这个答案对我很有帮助,因为它与[A-Z]有关,而不是[A-Z]。事实证明,有几个字符,包括ASCII中大写字母Z和小写字母a之间的下划线“Z”,这些字符与Java中的[a-Z]匹配,这是我代码中的一个错误。因此需要向上投票。以防您希望正则表达式确保密码至少包含一个数字、一个字母,并且最小长度为10,
“^(?=.[0-9])(?=.[a-z])[0-9a-zA-z]{10,}$”
查看查看更多信息
String password = "s8bgBQYPmUaNjkToXCJLAwAA"; 
System.out.println(sbContainsOneOf(password,"0123456789"));