String的正则表达式模式,具有多个前导和尾随的1和0

时间:2016-05-03 13:50:37

标签: java regex

我有一个搜索字符串,其中包含以下格式:

搜索字符串

    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]  );
        }
    }

2 个答案:

答案 0 :(得分:2)

您需要在第二部分中引用第二个捕获组,并且还需要将捕获组内的两个模式都设置为可选。

Pattern pattern = Pattern.compile("([0-9]?)\\1*"+c4MIDVal+"([0-9]?)\\2*");

DEMO

答案 1 :(得分:0)

使用String.contains()方法有什么问题?

"001111651311000".contains("111651311"); // true
"201674000000000".contains("111651311"); // false