我有以下Java代码段:
Pattern pattern = Pattern.compile("\\$\\{.+\\}");
String str = "str1/${com.test.p1}/str2/${com.test.p2}str3";
int start = 0;
Matcher m = pattern.matcher(str);
while (m.find(start)) {
System.out.println(m.start());
System.out.println(m.end());
start = m.end();
}
我尝试做的是提取括号中的字符串(com.test.p1& com.test.p2)。但是,在执行代码时,输出如下:
5
47
,这意味着模式匹配整个序列:
${com.test.p1}/str2/${com.test.p2}
最有可能的情况是,这会导致正则表达式有点贪婪并消耗所有输入,直到它到达最后一个结束括号。我如何重新编写模式,以便它匹配所有这些区域,假设没有固定的数字?
答案 0 :(得分:0)
答案 1 :(得分:0)
用以下代码替换代码的第一行:
Pattern pattern = Pattern.compile("[a-z0-9]+\\.[a-z0-9]+\\.[a-z0-9]+");
此模式将提取两个字符串com.test.p1
& com.test.p2
。然后代码的结果将是:
7
18
27
38
对于将来的正则表达式测试,我建议https://regexr.com/