2013-05-17 21 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); 
    } 
相关问题