在Java中使用正则表达式定义数字掩码
我试图定义一组规则,根据给定的数字计算掩码。例如,我尝试返回以12、13、14开头的任何数字的8472952424掩码,或返回以7或8开头的任何数字的847235XXXX掩码 输入数字为4位整数,返回字符串。在对整数执行正则表达式之前,是否需要将整数转换为字符串?我也不知道如何构造表达式 编辑 我有太多的标准需要为每个案例使用单独的if语句。我正在将分机号码与掩码进行匹配,以便将其正确插入Cisco CallManager数据库(以防您好奇) 编辑 这是我为其中一个案例所做的,但仍然不正确匹配:在Java中使用正则表达式定义数字掩码,java,regex,masking,cucm,Java,Regex,Masking,Cucm,我试图定义一组规则,根据给定的数字计算掩码。例如,我尝试返回以12、13、14开头的任何数字的8472952424掩码,或返回以7或8开头的任何数字的847235XXXX掩码 输入数字为4位整数,返回字符串。在对整数执行正则表达式之前,是否需要将整数转换为字符串?我也不知道如何构造表达式 编辑 我有太多的标准需要为每个案例使用单独的if语句。我正在将分机号码与掩码进行匹配,以便将其正确插入Cisco CallManager数据库(以防您好奇) 编辑 这是我为其中一个案例所做的,但仍然不正确匹配:
public String lookupMask(int ext){
//convert to String
StringBuilder sb = new StringBuilder();
sb.append(ext);
String extString = sb.toString();
//compile and match pattern
Pattern p = Pattern.compile("^[12|13|14|15|17|19|42]");
Matcher m = p.matcher(extString);
if(m.matches()){
return "8472952424";
}
return null;
}
模式的一个例子可以是:
package test;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
public class Main {
// working Pattern
private static final Pattern PATTERN = Pattern.compile("^((1[234579])|42)");
// Your Pattern won't work because although it takes in account the start of the
// input, the OR within a character class does not exempt you to write round brackets
// around sequential characters such as "12".
// In fact here, the OR will be interpreted as the "|" character in the class, thus
// allowing it as a start character.
private static final Pattern NON_WORKING_PATTERN = Pattern.compile("^[12|13|14|15|17|19|42]");
private static final String STARTS_WITH_1_234 = "8472952424";
private static final String STARTS_WITH_ANYTHING_ELSE = "847295XXXX";
public static void main(String[] args) {
// NON_WORKING_PATTERN "works" on "33333"
System.out.println(NON_WORKING_PATTERN.matcher("33333").find());
int[] testIntegers = new int[]{1200, 1300, 1400, 1500, 1700, 1900, 4200, 0000};
List<String> results = new ArrayList<String>();
for (int test: testIntegers) {
if (PATTERN.matcher(String.valueOf(test)).find()) {
results.add(STARTS_WITH_1_234);
}
else {
results.add(STARTS_WITH_ANYTHING_ELSE);
}
}
System.out.println(results);
}
}
是的,您需要转换为字符串
我不知道您是否需要将它们转换为字符串
。一个以12、13或14开头的四位数整数应该是1200谢谢,这很有效!我如何验证我的正则表达式是否正确,是否有一个web工具可以做到这一点?我还有其他一些案子要办check@user2247823不客气。在线上有很多Java和非Java regex tester web应用程序,只要用谷歌搜索一下,你就会发现很多。最终,我的个人圣经是官方的
true
[8472952424, 8472952424, 8472952424, 8472952424, 8472952424, 8472952424, 8472952424, 847295XXXX]