首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Regex和Java提取基于百分比符号的编码字符串

使用Regex和Java提取基于百分比符号的编码字符串
EN

Stack Overflow用户
提问于 2020-08-11 20:42:26
回答 2查看 48关注 0票数 1

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

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

在regexr.com上,它工作正常,它符合我的需求。

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

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

代码语言:javascript
运行
复制
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%C20的输出是%C3%A9,而不是%C3%A9 + %C20

因为test%C3%A9+%C3%A0+100%%C3%A9,而不是%C3%A9 + %C3%A0

EN

回答 2

Stack Overflow用户

发布于 2020-08-11 20:54:09

您正在使用的正则表达式过于复杂。此外,您尝试打印所有匹配的方式也不起作用。试试这个:

代码语言:javascript
运行
复制
String input = "caf%C3%A9+100%+noir%C20";
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());
}

这将打印:

代码语言:javascript
运行
复制
%C3%A9
%C20
票数 2
EN

Stack Overflow用户

发布于 2020-08-11 20:58:49

基于@41686d6564注释,解决方案是使用while循环和group(0)

代码语言:javascript
运行
复制
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));
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63358383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档