2016-05-03 234 views
0

我有一个包含以下格式的搜索字符串:正则表达式模式

搜索字符串

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

'indexOf'不足够吗? – Berger

+0

或'contains'。吻。 – NickJ

+0

我已经包含了我的代码,请检查 – dimas

回答

2

您需要参考在第二部分中的第二个捕获组比较清楚的代码并且您还需要将捕获组内的两种模式设置为可选。

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

DEMO

+0

另外,动态部分应引用:'Pattern.quote(c4MIDVal)'。可能不需要,因为它只是数字,但仍然是一个好主意。 – Andreas

+0

嗨avinash,谢谢你的回复。尝试了你的建议,但仍然有很多结果。它可以匹配这个,但不是这些序列054111650024000. – dimas

+0

@dimas什么是c4MIDVal值? –

0

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

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

它将不会返回匹配的字符串。 –

+0

@AvinashRaj它是你正在比较的字符串? –