我有源字符串"This is my test string"
,并希望使用特定模式提取它的值:"{0} is my {1} string"
我想在这里提取例如This
和test
。如何使用正则表达式匹配组编写?
以下是我想出的某种伪代码。但我不确切知道如何实现这些匹配组:
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)
吗?这可能吗?
答案 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()