如何用正则去除RQL查询中数字前导零且不影响时间戳
移除RQL查询中纯数字字符串的前导零(避免误删时间戳)
原正则\b0+的问题在于匹配范围太广,会误识别日期格式(如2013-01-18)中-与0之间的单词边界,导致时间戳里的零被错误移除。要解决这个问题,需要仅针对单引号包裹的纯数字串处理前导零,而非全局匹配。
解决方案
使用带捕获组的正则表达式,精准定位单引号内的纯数字序列,只移除其前导零:
基础版(处理非全零的纯数字)
String processedQuery = query.replaceAll("(')(0+)([1-9]\\d*)(')", "$1$3$4");
增强版(兼容全零场景,如'0000'替换为'0')
String processedQuery = query.replaceAll("(')(0+)([1-9]\\d*|0)?(')", "$1${3:-0}$4");
正则逻辑说明
('):捕获开头的单引号,保留原RQL格式(0+):匹配需要移除的一个或多个连续前导零([1-9]\\d*|0)?:捕获有效数字部分,要么是1-9开头的合法数字串,要么是单个0(处理全零输入的特殊情况)('):捕获结尾的单引号,保留原RQL格式- 替换规则:用「开头单引号 + 有效数字 + 结尾单引号」替换原带前导零的字符串
测试效果
对示例查询:
String query = "or(contains(number,'04506'),contains(name,'04506'),contains(vendorInfo.name,'04506'),contains(vendorInfo.number,'04506'),contains(costCategories.name,'04506'))";处理后所有
'04506'会变为'4506'。对时间戳查询:
String query = "ge(dateCreated,'2013-01-18T19:30:00.000Z')";时间戳内容完全保留,无任何修改。
内容的提问来源于stack exchange,提问作者nik2811
相关产品推荐
相关产品推荐

