Java正则表达式匹配错误

时间:2010-02-06 02:42:09

标签: java regex

我正在尝试以下细分无效:

 public class test {

    public static void main(String args[] ){

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

   }

}

我希望这可以工作,因为我只是寻找任何数字的匹配以满足正则表达式,但我的输出总是回来假。对于我可能缺少的或者可能出错的任何帮助都将非常感激。

3 个答案:

答案 0 :(得分:2)

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

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

.*添加到开头和结尾可使其与任意数量的其他字符匹配(.表示“任意字符”,*表示“任意次数”。)< / p>

答案 1 :(得分:0)

您可能会或可能不想使用[A-z]代替。如果你不希望它匹配特殊字符。我不是一个java人,所以java中正则表达式的细节最好通过以下方式呈现:http://www.regular-expressions.info/java.html

答案 2 :(得分:0)

如果你经常在一个循环中进行这种类型的角色审讯,你可能根本不想使用正则表达式,而是创建自己的搜索例程来询问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;
}

然后您需要做的就是调用它:

String password = "s8bgBQYPmUaNjkToXCJLAwAA"; 
System.out.println(sbContainsOneOf(password,"0123456789"));

这样做的速度要快10到15倍....你的弦乐和弦乐的时间越长选项列表两者之间的差异越大。一般来说,我避免使用regexp,除非它们只是一次性或者非常复杂地实现为代码,而更喜欢用优化的基于StringBuffer的例程来代表它们。这样做,渐渐地你的正则表达式替换的集合填满了,你最终得到一种非常有用的模式审讯方式,而没有高关联的正则表达式开销。