如何在java中找到特定Pattern的String值?

时间:2015-03-27 05:50:06

标签: java regex

在我的页面中,我有几个具有相同模式的值,如${rate+0.0020D2},${rate-0.4002D3},${rate+0.2003D4}

基本上,模式是${[rate][+ or - sign][a neumeric value ][D2 or D3 or D4]}

所以我想在我的jsp中找到所有具有这些模式的值,并希望将它们存储在数组中。

必须应用哪种正则表达式模式才能找出此模式的值。

2 个答案:

答案 0 :(得分:4)

可能有更好的方法来做到这一点,但这是我的基本看法......

String regExp = "\\$\\{rate[+-]\\d+(\\.\\d+)?D[0-9]\\}";
String value = "${rate+0.0020D2},banana,${rate-0.4002D3},${rate+0.2003D4},${rate+bananD4},${rate+.123.415D4}";

Pattern pattern = Pattern.compile(regExp);
Matcher matcher = pattern.matcher(value);

String match = null;

List<String> matches = new ArrayList<String>(5);
while (matcher.find()) {

    int startIndex = matcher.start();
    int endIndex = matcher.end();

    match = matcher.group();
    matches.add(match);

}
String[] results = matches.toArray(new String[0]);

System.out.println(Arrays.toString(results));

将输出

[${rate+0.0020D2}, ${rate-0.4002D3}, ${rate+0.2003D4}]

答案 1 :(得分:2)

\${(rate[+-]\d+(?:\.\d+)?(?:D2|D3|D4))}

试试这个。查看演示。抓住group 1

https://regex101.com/r/sJ9gM7/12