有效:abc
abc11
无效:11
a-b
a&&b
a << b
a&b
a->b
答案 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]*+$"