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

标签 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+", ""));

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

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

}

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

我做错了什么?

最佳答案

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

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

参见 Java demo和一个 regex demo .

关于java - 如何检查特定模式是否在某些字符之前?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42791756/

相关文章:

java - 为 com.sun.net.httpserver.HttpServer (Java) 创建动态上下文

java - 打印并行运行的多个 SSH 命令的输出

java - 在 SugarORM 中将对象作为参数传递

Python Regex 查找连字符后非数字范围的匹配组,如果范围不存在则忽略模式的其余部分

正则表达式 - 嵌套前瞻断言

Java Swing : Show pressed button when using corresponding keyboard button

c# - 正则表达式匹配除

javascript - 在正则表达式 Javascript 中获取内部字符串前后的字符串

r - Tidyr使用正则表达式将列值分为字符和数字

regex - 正则表达式 - 匹配句子中每个单词中除第一个字母之外的所有字母