正则表达式要求:它应该只包含[字母]和[字母和数字]但不包含[仅数字]而不包含java中的运算符或特殊字符

时间:2010-10-11 05:54:40

标签: java regex

有效:abc abc11

无效:11 a-b a&&b a << b a&b a->b

4 个答案:

答案 0 :(得分:2)

一个正则表达式:

/^[a-zA-Z\d]*[a-zA-Z]+[a-zA-Z\d]*^/

答案 1 :(得分:1)

你需要两个正则表达式。一个检查它只是字母数字/[a-zA-Z0-9]+/,一个检查它不仅仅是数字/^[^0-9]+$/只检查第二个是否第一个通过。

答案 2 :(得分:1)

此正则表达式应该完成这项工作:/^[a-zA-Z\d]*[a-zA-Z][a-zA-Z\d]*^/

请注意,这个正则表达式可能会导致大量的回溯;在最坏的情况下,它将是O(N^2)。使第一次重复变得懒惰而不是渴望将使正则表达式更快......如果它将匹配。加速不匹配案例的方法是使用两个正则表达式。

或者更好的是,根本不要使用正则表达式和简单Java中的代码匹配:

public boolean matchSymbol (String input) {
    boolean seenLetter = false;
    final int len = input.length();
    for (int i = 0; i < len; i++) {
        char ch = input.charAt(i);
        if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z') {
            seenLetter = true;
        } else if (ch < '0' || ch > '9') {
            return false;
        }
    }
    return seenLetter;
}

对于N字符字符串,这会在N循环迭代中成功,或者在(通常)小于N次迭代中失败。

答案 3 :(得分:0)

"^[0-9]*+[A-Za-z][A-Za-z0-9]*+$"