首页 > 解决方案 > 使用 Regex 和 Java 提取基于百分比符号的编码字符串

问题描述

我正在尝试检测/匹配以 . 开头的编码字符%

我的正则表达式是([%][2-9|A-F][0-9A-F]{1,2})+

在 regexr.com 上它可以工作并且符合我的需要。

我使用这些字符串进行测试:caf%C3%A9+100%+noir%C20test%C3%A9+%C3%A0+100%

在我的 Java 代码中,它只返回第一组。

String pattern = "([%][2-9|A-F][0-9A-F]{1,2})+";
Matcher matcher = Pattern.compile(pattern ).matcher(input);
if (matcher.find()) {
  for (int i = 0; i < matcher.groupCount(); i++) {
    System.out.println(matcher.group(i));
  }
}

并且输出caf%C3%A9+100%+noir%C20is%C3%A9而不是%C3%A9+ %C20

对于test%C3%A9+%C3%A0+100%is%C3%A9和 not %C3%A9+%C3%A0

标签: javaregex

解决方案


根据@41686d6564 评论,解决方案是使用while循环和group(0)

String pattern = "([%][2-9A-F][0-9A-F]{1,2})+"; 
Matcher matcher = Pattern.compile(pattern).matcher(input);
while (matcher.find()) {
  System.out.println(matcher.group(0));
}

推荐阅读