我有一个正则表达式,我用它来查找字符串中 <> 之间的逗号分隔单词列表的匹配项,就像"Hello <a1> sqjsjqk <b1,b2> dsjkfjkdsf <c1,c2,c3> ffsd"
在示例中一样
我想使用捕获组来保留大括号之间的每个单词:
这是我的表达:(< (\w+) (?: ,(\w+) )* >
添加空格是为了便于阅读,但不是模式的一部分)
括号用于创建捕获组,(?: )
用于创建非捕获组,因为我不想保留昏迷。
这是我的测试代码:
@Test
public void test() {
String patternString = "<(\\w+)(?:,(\\w+))*>";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher("Hello <a1> sqjsjqk <b1,b2> dsjkfjkdsf <c1,c2,c3> ffsd");
while(matcher.find()) {
System.out.println("== Match ==");
MatchResult matchResult = matcher.toMatchResult();
for(int i = 0; i < matchResult.groupCount(); i++) {
System.out.println(" " + matchResult.group(i + 1));
}
}
}
这是产生的输出:
== Match ==
a1
null
== Match ==
b1
b2
== Match ==
c1
c3
这就是我想要的:
== Match ==
a1
== Match ==
b1
b2
== Match ==
c1
c2
c3
由此我了解到,在我的表达式中,组的数量与捕获组的数量一样多,但这不是我想要的,因为我需要所有被识别为 \w+
有没有机会用一个 RegExp 得到我想要的东西,或者我应该用 , 等来完成split(",")
工作trim()
......