java - Java Regex Group By 不能按预期的数字工作
问题描述
我遇到了 Java Matchers 的问题。我可能在这里忽略了一些非常小的东西,但是下面的匹配器没有给出预期的结果
private static final Pattern STANDARD_NAME_PATTERN = Pattern.compile("MySampleString.*?/(?<PatternOne>.+?)/(?<PatternTwo>\\w+?)/PatternThree(?<PatternThree>\\d+?).*");
public static void main(String[] args) {
String key = "PatternThree";
String value = "EMPTY";
String name = "MySampleString/IRRELEVANT/IRRELEVANT/PatternThree15";
Matcher matcher = STANDARD_NAME_PATTERN.matcher(name);
if (matcher.matches()) {
value = matcher.group(key);
}
System.out.println(value);
}
以下输出是
1
但是,我希望它在这里是 15,因为我们将数字与 \d+ 匹配其他两个模式与单词匹配......如果有人可以提供见解,不确定这里的问题是什么。
我可以使用的黑客之一是
Pattern.compile("MySampleString.*?/(?<PatternOne>.+?)/(?<PatternTwo>\\w+?)/PatternThree(?<PatternThree>\\d\\d\\d?).*");
但理想情况下不想这样做,因为它不能扩展
解决方案
试试这个(删除最后一个问号):
MySampleString.*?/(?<PatternOne>.+?)/(?<PatternTwo>\w+?)/PatternThree(?<PatternThree>\d+).*
见正则表达式演示
推荐阅读
- hibernate - 在 hql 中使用子查询进行内部连接
- android - Dart/Flutter - 调用/执行存储在属性上的字符串变量中的方法
- amazon-web-services - AWS Serverless Lambda 函数:No module by name elasticsearch 错误
- ios - Swift 泛型类型
- sprite-kit - 在计算随机平台时,SKAction“延迟”期间的帧率下降
- web-scraping - 使用 Goutte 获取网站图标
- python - 加载没有搜索查询的 URL
- python-3.x - 如何在 python 中打印打开的办公文档?
- vue.js - 在 TDD 期间模拟 Vue 实例上的方法
- android - (无作用域)不能依赖于 dagger2 中的作用域组件