正则表达式匹配所有数字,但日期时间格式中包含的数字除外

Regexp match all digit except the ones included in dateTime format

我目前正在寻找 regexp 来匹配(负数)数字,日期时间格式中包含的数字除外。

例子:

WHERE id=2 and date > 1990-11-10
=> 2 

应该匹配。 我尝试了几种解决方案,但 none 给我的结果除外。 这是我已经尝试过的:

[-]?\d+[^(\d+-\d+-\d+)] => char-class 值超出范围

(?<=(=|>|<| ))[-]?\d+$ => 不错,但不匹配不在行尾的数字

(?<=(=|>|<| ))[-]?\d+ => 不排除日期时间格式的第一位数字

(?<=(=|>|<| ))[-]?\d+(<!(:|-)) => 后视模式无效。

最后一个解决方案似乎是最好的,但我不明白这个错误。 我用这个 link http://www.regular-expressions.info/lookaround.html 来构建它们并用 rubular 来测试。

这是我的测试sheet:http://rubular.com/r/2bXr53XTpq

顺便说一句:这是我们使用的代码:

 public static String formatCondition(String condition) {
        if (condition != null)
        {
            try
            {
                Pattern pNumbers = Pattern.compile("(?<=(=|>|<| ))[-]?\d+");

                Matcher mNumbers = pNumbers.matcher(condition);
                condition = mNumbers.replaceAll("''");

            } catch (Exception e)
            {
                e.printStackTrace();
            }
        }

        return condition;
    }

所以我正在寻找正确的正则表达式或其他解决方案。 谢谢!

编辑:错误 "Invalid pattern in look-behind" 显然只出现在 Ruby 中(因为 rubular 用于 Ruby 但仍然比另一个更好^^)。我在 http://www.regexe.com/ 上进行了测试,但结果仍然错误('22' 和 '00' 匹配)

Edit2:VKS 的回答:(?<=[^\w-:])[+-]?\d+(?=\s|$) 有效,如果其他人需要,我会在这里!

(?<=[^\w-:])[+-]?\d+(?=\s|$)

您可以使用这个 instead.See 演示。

https://regex101.com/r/hE4jH0/24