Java 如何检查特定图案是否位于某个字符之前?

Java 如何检查特定图案是否位于某个字符之前?,java,regex,lookahead,Java,Regex,Lookahead,我是java正则表达式的新手,我找不到答案 这是我的正则表达式:-?\\d*\\.?\\d+(?!i) 我希望它不识别例如字符串551i 这是我的方法: private static double regexMatcher(String s, String regex) { Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(s.replaceAll("\\s+", ""));

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

这是我的正则表达式:
-?\\d*\\.?\\d+(?!i)
我希望它识别例如
字符串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


我做错了什么?

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

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

请参阅和。

您能再帮我一件事吗?为什么这个正则表达式将
-0.501
识别为-0?我怎么才能不去呢?正则表达式。对不起,我是说
-0.501i
为-0?我的正则表达式有什么快速解决方案吗?使用原子组-
-(?>\d*\.?\d+(!i)