正则表达式匹配除dateTime格式中包含的数字之外的所有数字

时间:2015-12-02 12:53:18

标签: java regex format pattern-matching matcher

我目前正在寻找匹配(负数)数字的 regexp ,但不包括日期时间格式中的数字。

例:

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

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

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

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

(?<=(=|>|<| ))[-]?\d+ =&gt;不要排除dateTime格式的第一个数字

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

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

这是我的测试表: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;
    }

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

编辑:错误&#34;后卫中的无效模式&#34;显然只出现在Ruby中(因为rubular用于Ruby,但仍然比另一个更好^^)。我在http://www.regexe.com/上进行了测试,但结果仍然错误(&#39; 22&#39;以及&#39;&#39;匹配)

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

1 个答案:

答案 0 :(得分:0)

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

您可以改用它。参见演示。

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