2013-05-17 27 views
0

我想從一個冗長的字符串中獲取一個字符串數組。數組由兩個其他字符串(在我的情況下爲??????)之間匹配的字符串組成。我想下面的代碼,它不是給我預期的結果Reg表達式 - 在匹配字符串之間拆分字符串

Pattern pattern = Pattern.compile("\\?\\?\\?(.*?)\\?\\?\\?"); 
    String[] arrayOfKeys = pattern.split("???label.missing???sdfjkhsjkdf sjkdghfjksdg ???some.label???sdjkhsdj"); 

    for (String key : arrayOfKeys) { 
     System.out.println(key); 
    } 

我預期的結果是:

["label.missing", "some.label"] 

回答

3

使用Pattern.matcher()獲得Matcher爲輸入字符串,然後使用Matcher.find()找到模式你要。 Matcher.find()將找到匹配提供的Pattern的子字符串。

Pattern pattern = Pattern.compile("\\?{3}(.*?)\\?{3}"); 
Matcher m = pattern.matcher(inputString); 

while (m.find()) { 
    System.out.println(m.group(1)); 
} 

Pattern.split()會使用你的圖案作爲分隔符來分割字符串(然後分隔符部分被丟棄),這顯然不是你在這種情況下,想要的東西。您的正則表達式旨在匹配您要提取的文本。

予縮短使用量詞重複,而不是寫\? 3倍恰好3次{3},圖案。

+0

可正常工作。非常感謝。 – Siva

+0

+好的徹底的答案。 –

0

我會創建一個字符串輸入與你想要分裂,並調用input.split()。

String input = "???label.missing???sdfjkhsjkdf sjkdghfjksdg ???some.label???sdjkhsdj"; 
String[] split = input.split("\\?\\?\\?"); 

嘗試在這裏: http://ideone.com/VAmCyu

+0

您如何識別所需物品的垃圾物品? – ajp15243

+0

哦,只有標籤是需要的?你可以接受其他的嗎? – Lily

0
Pattern pattern = Pattern.compile("\\?{3}(.+?)\\?{3}"); 
    Matcher matcher= pattern.matcher("???label.missing???sdfjkhsjkdf sjkdghfjksdg ???some.label???sdjkhsdj"); 

    List<String> aList = new ArrayList<String>(); 

    while(matcher.find()) { 
     aList.add(matcher.group(1)); 
    } 


    for (String key : aList) { 
     System.out.println(key); 
    } 
相關問題