我目前正在寻找一个正则表达式,它的匹配(负)数字不包括日期-时间格式中包含的数字。
示例:
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