我目前正在寻找匹配(负数)数字的 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|$)
有效,如果其他人需要,我会在这里发出!