首先,让我告诉你我是REGEX的新手,而且我的英语不是更好......
我正在尝试捕获重复组,就像来自http协议的可选标头一样。
我需要的是一个字符串获取所有标题(无或多个):
GET /RESOURCE/RES1 H1:value H2:value H3:value
所以我尝试过的是:
GET /RESOURCE/([^/\s]*)(\s[a-zA-Z:/|-]*)+
但我得到的只是:
Group 1 = LS
Group 2 = H3:value
我做错了什么?
答案 0 :(得分:1)
您可以使用\G
锚点执行类似操作,但无法单独捕获重复的模式。
(?:\G(?!\A)|GET /RESOURCE/)(\S+)(?: |$)
示例:
String s = "GET /RESOURCE/RES1 H1:value H2:value H3:value";
Pattern p = Pattern.compile("(?:\\G(?!\\A)|GET /RESOURCE/)(\\S+)(?: |$)");
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println(m.group(1));
}
输出
RES1
H1:value
H2:value
H3:value
答案 1 :(得分:0)
您可以添加包含最后一个捕获组和量词+
的另一个捕获组。实际上,您可以将当前捕获组设置为非捕获:
GET /RESOURCE/([^/\s]*)((?:\s[a-zA-Z:/|-]*)+)
现在,捕获组2
将为您提供以下结果:
H1:value H2:value H3:value
您可以通过拆分空格,然后冒号来获取单个标题。