0

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

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"]
4

3 回答 3

3

用于Pattern.matcher()获取Matcher输入字符串的 a,然后用于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 次。

于 2013-05-17T14:48:31.487 回答
0

我将使用您要拆分的内容创建一个字符串输入,并在其上调用 input.split() 。

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

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

于 2013-05-17T14:49:18.303 回答
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);
    }
于 2013-05-17T14:54:08.270 回答