Reg表达式 - 在匹配的字符串之间拆分字符

时间:2013-05-17 14:41:37

标签: java regex

我试图从一个冗长的字符串中获取一个字符串数组。数组由两个其他字符串(在我的例子中为??????)之间匹配的字符串组成。我尝试了以下代码,并没有给我预期的结果

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 个答案:

答案 0 :(得分: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次。

答案 1 :(得分:0)

我会用你要分割的东西创建一个字符串输入,并在其上调用input.split()。

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

在这里试试: http://ideone.com/VAmCyu

答案 2 :(得分: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);
    }