Regexp匹配除dateTime格式中包含的数字以外的所有数字



我目前正在寻找一个正则表达式,它的匹配(负)数字不包括日期-时间格式中包含的数字。

示例:

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

应该匹配。我尝试了几种解决方案,但没有一个能给我结果。以下是我已经尝试过的:

[-]?d+[^(d+-d+-d+)]=>字符类值超出范围

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

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

(?<=(=|>|<| ))[-]?d+(<!(:|-))=>look-behind中的模式无效。

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

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

BTW:这是我们使用的代码:

 public static String formatCondition(String condition) {
        if (condition != null)
        {
            try
            {
                Pattern pNumbers = Pattern.compile("(?<=(=|>|<| ))[-]?\d+");
                Matcher mNumbers = pNumbers.matcher(condition);
                condition = mNumbers.replaceAll("'$1'");
            } catch (Exception e)
            {
                e.printStackTrace();
            }
        }
        return condition;
    }

因此,我正在寻找正确的regexp或其他解决方案。谢谢

编辑:错误"无效模式在后面看"显然只出现在Ruby中(因为rubular是Ruby的,但仍然比其他^^更好)。我在http://www.regexe.com/上进行了测试,但结果仍然错误('22'和'00'匹配)

第二版:VKS的答案:(?<=[^w-:])[+-]?d+(?=s|$)有效,如果其他人需要,我就让这里!

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

你可以用这个来代替。请参阅演示。

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

最新更新