java - 使用 Regex 和 Java 提取基于百分比符号的编码字符串
问题描述
我正在尝试检测/匹配以 . 开头的编码字符%
。
我的正则表达式是([%][2-9|A-F][0-9A-F]{1,2})+
在 regexr.com 上它可以工作并且符合我的需要。
我使用这些字符串进行测试:caf%C3%A9+100%+noir%C20
和test%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%C20
is%C3%A9
而不是%C3%A9
+ %C20
。
对于test%C3%A9+%C3%A0+100%
is%C3%A9
和 not %C3%A9
+%C3%A0
解决方案
根据@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));
}
推荐阅读
- google-search - 我需要在 Google 搜索结果中添加更多预览行
- hadoop3 - hadoop 3.3.1 fs -mkdir 没有这样的文件或目录
- python - 将 Scala neo4j 写入代码转换为 databrick 中的 Pyspark
- c++ - 在文本文件中查找一个单词并在 C++ 中显示该单词的起始位置
- python - python 和 pandas:使用来自一个 df 的 bin 计数从另一个 df 获得类似的 bin 计数,没有共享列
- android - Admob 横幅和智能横幅广告在加载时会填满整个屏幕
- python - pandas.core.series.Series 浮动
- c# - 从 c# 运行 PowerShell 脚本
- sql-server - 如何导入 .bak 文件以在 vscode 上使用 mssql?
- exception - 如何处理在java 6中引发多个异常的方法