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"));