如何匹配字符串与匹配组以提取值?

时间:2014-03-12 08:04:30

标签: java regex matcher

我有源字符串"This is my test string",并希望使用特定模式提取它的值:"{0} is my {1} string"

我想在这里提取例如Thistest。如何使用正则表达式匹配组编写?

以下是我想出的某种伪代码。但我不确切知道如何实现这些匹配组:

Matcher match = Pattern.compile("(.*) is my (.*) string").matcher("This is my test string");
if (match.matches()) {
    for (int i = 0; i <= match.groupCount(); i++) {
        Sysout(match.group(i));
    }
}

打印:

This is my test string
This
test

但我想得到:

This
test

如何防止将整个字符串作为匹配组?或者我可以直接将匹配绑定到特定的匹配组吗? 与{1} is my {0} string一样,test会转到match.group(0)吗?这可能吗?

2 个答案:

答案 0 :(得分:2)

除了评论中提到的群组索引问题外,还有另一个问题:

  

[...]我可以直接将匹配绑定到特定的匹配组吗?就像{1}是我的{0}字符串,其中test将进入match.group(0)?这可能吗?

不使用Java 6.使用Java 7+,您可以使用命名捕获组:

Pattern.compile("(?<first>.*) is my (?<second>.*) string")

然后,您可以在.group("first")个实例上使用.group("second")Matcher

请注意,.group()相当于.group(0)

答案 1 :(得分:1)

组0始终是整个匹配的字符串。您在正则表达式中定义的匹配组始终从1开始。

javadoc for Matcher.group(int)

上有一个战利品
  

组零表示整个模式,因此表达式m.group(0)为   相当于m.group()