我有一串数字,每个数字在字符串中可以显示为零或一次。我可以通过RegEx验证吗?我可以做一些事情,比如检查字符数组是否重复,但更喜欢坚持我的常规验证例程。
以下内容应返回“匹配”
String thisItemText = "12679";
if(!thisItemText.matches("[1245679]*")) {
System.out.println("No Match");
} else {
System.out.println("Match");
}
以下内容应返回“No Match”(注意双“2”)
String thisItemText = "122679";
if(!thisItemText.matches("[1245679]*")) {
System.out.println("No Match");
} else {
System.out.println("Match");
}
答案 0 :(得分:7)
如果有重复的数字,正则表达式(\d).*\1
将匹配。
答案 1 :(得分:2)
以下是您需要的正则表达式:
(?:([1245679])(?!\\1))+
以下内容返回“匹配”
String thisItemText = "12679";
if(!thisItemText.matches("(?:([1245679])(?!\\1))+")) {
System.out.println("No Match");
} else {
System.out.println("Match");
}
以下内容返回“No Match”
String thisItemText = "122679";
if(!thisItemText.matches("(?:([1245679])(?!\\1))+")) {
System.out.println("No Match");
} else {
System.out.println("Match");
}
干杯
答案 2 :(得分:1)
有没有regexp的解决方案,假设char set是ASCII
public static boolean isUniqueChars(String str)
{
boolean[] char_set = new boolean[256];
for (int i = 0; i < str.length(); i++)
{
int val = str.charAt(i);
if (char_set[val]) return false;
char_set[val] = true;
}
return true;
}
答案 3 :(得分:1)
尝试这种模式:
"(?<=([0-9]))(?:(?!\\1).)*\\1(?!\\1)"
将匹配具有任何重复数字的字符串。因此,如果它不匹配则它没有任何重复数字。
答案 4 :(得分:-1)
如果您正在寻找完全那个数字序列,那么您必须使用(1245679)*
作为正则表达式,如果没有,您正在寻找的内容无法使用正则表达式完成,并且您有使用自定义解析器。