正则表达式匹配所有数字,但日期时间格式中包含的数字除外
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 演示。
我目前正在寻找 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 演示。