我并不是真的要问正则表达式模式,而是更多关于它的捕获组。我正在尝试在匹配时将匹配与正确的捕获组相关联。例如,使用以下模式将字符串:>>>> !something! 100 num *** <<<<:
设置为匹配器组1-6
:
(>>>>)|(!something!)|(\d{3})|(\w+)|(\*)+|(<<<<)
然后假设你有字符串101 any <<<<
。它匹配捕获组3
,4
和6
。匹配器将匹配项放入1
,2
,3
。是否可以使用与捕获组相同的方式设置匹配数组 - 以便用该顺序填充数组中的空元素?基本上我想调用匹配器数组,它返回empty empty 101 any empty <<<<
List n = new ArrayList();
for(int i = 0; i < 6; i++) {
n.add(matcher.group(i));
}
如果匹配器找到字符串的所有捕获组,则此方法有效,但在字符串缺少任何内容时不起作用。
答案 0 :(得分:0)
返回给定组在此期间捕获的输入子序列 上一场比赛操作。对于匹配器m,输入序列s和组 index g,表达式m.group(g)和s.substring(m.start(g), m.end(g))是等价的。
捕获组从左到右编制索引,从1开始。 组零表示整个模式,因此表达式m.group(0)是 相当于m.group()。
如果匹配成功但指定的组无法匹配 输入序列的任何部分,然后返回null。请注意一些 组,例如(a *),匹配空字符串。这种方法会 当这样一个组成功匹配时,返回空字符串 输入中的空字符串。
因此,为了使用捕获组概念,您的模式应与字符串完全匹配。希望这会有所帮助。
修改强>
我认为你正在寻找类似的东西。
Pattern p = Pattern.compile("(>>>>)?(!something!)?([\\d]{3})?([\\w]+)?([\\*]+)?(<<<<)");
String s1 = ">>>>!something!100num***<<<<";
Matcher m = p.matcher(s1);
if(m.matches()) {
for(int i=1;i<=m.groupCount();i++) {
System.out.println("Group " + i + ": " + m.group(i));
}
}
s1 = "101any<<<<";
m = p.matcher(s1);
if(m.matches()) {
for(int i=1;i<=m.groupCount();i++) {
System.out.println("Group " + i + ": " + m.group(i));
}
}
以上是上面的输出:
Group 1: >>>>
Group 2: !something!
Group 3: 100
Group 4: num
Group 5: ***
Group 6: <<<<
Group 1: null
Group 2: null
Group 3: 101
Group 4: any
Group 5: null
Group 6: <<<<
希望这能帮助你朝着正确的方向前进。