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

How to check if specific pattern precedes some character?

我是 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());

}

我希望此方法 return 0.0 但它保持 returning 55.0.

我做错了什么?

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

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

参见Java demo and a regex demo