我有一个搜索字符串,其中包含以下格式:
搜索字符串
111651311
111651303
4111650024
4360280062
20167400
需要与下面的数字序列匹配
001111651311000
001111651303000
054111650024000
054360280062000
201674000000000
请注意,搜索字符串已添加,每侧都有其他数字。 我在java中尝试了下面的正则表达式以匹配搜索字符串,但它只适用于某些。
Pattern pattern = Pattern.compile("([0-9])\1*"+c4MIDVal+"([0-9])\1*");
有什么建议吗?
添加了我在下面使用的代码可能会提供一些关于我想要做什么的清晰
代码段
public void compare(String fileNameAdded, String fileNameToBeAdded){
List<String> midListAdded = readMID.readMIDAdded(fileNameAdded);
HashMap<String, String> midPairsToBeAdded = readMID.readMIDToBeAdded(fileNameToBeAdded);
List <String []> midCaptured = new ArrayList<String[]>();
for (Map.Entry<String, String> entry: midPairsToBeAdded.entrySet()){
String c4StoreKey = entry.getKey();
String c4MIDVal = entry.getValue();
Pattern pattern = Pattern.compile("([0-9]?)\\1*"+c4MIDVal+"([0-9]?)\\2*");
for (String mid : midListAdded){
Matcher match = pattern.matcher(mid);
// logger.info("Match Configured MID :: "+ mid+ " with Pattern "+"\\*"+match.toString()+"\\*");
if (match.find()){
midCaptured.add(new String []{ c4StoreKey +"-"+c4MIDVal, mid});
}
}
}
logger.info(midCaptured.size()+ " List of Configured MIDs ");
for (String [] entry: midCaptured){
logger.info(entry[0]+ "- "+entry[1] );
}
}
答案 0 :(得分:2)
您需要在第二部分中引用第二个捕获组,并且还需要将捕获组内的两个模式都设置为可选。
Pattern pattern = Pattern.compile("([0-9]?)\\1*"+c4MIDVal+"([0-9]?)\\2*");
答案 1 :(得分:0)
使用String.contains()
方法有什么问题?
"001111651311000".contains("111651311"); // true
"201674000000000".contains("111651311"); // false