如何检查特定模式是否在某些字符之前?

时间:2017-03-14 16:41:46

标签: java regex lookahead

我是java正则表达式的新手,我找不到答案。

这是我的正则表达式:-?\\d*\\.?\\d+(?!i) 我想要来识别例如。 String 551i

这是我的方法:

private static double regexMatcher(String s, String regex) {
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(s.replaceAll("\\s+", ""));

    if (!matcher.find()) {
        return 0;
    }
    String found = matcher.group();

    return Double.parseDouble(matcher.group());

}

我希望此方法返回0.0,但它会一直返回55.0。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

使用原子组避免回溯到整个数字点数匹配模式:

"-?(?>\\d*\\.?\\d+)(?!i)"

请参阅Java demoregex demo