2016-05-03 235 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它是你正在比較的字符串? –