You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用RegEx查询Cosmos DB记录?匹配10位数字报错解决

在Azure Cosmos DB NoSQL查询中匹配10位数字的正则问题解决

问题描述

容器内的文档示例:

{
  "id": "abc",
  "stockNumber": "1001234567"
}

{
  "id": "pqr",
  "stockNumber": "200"
}

{
  "id": "xyz",
  "stockNumber": "200111"
}

尝试用正则匹配恰好10位数字的stockNumber字段,执行以下查询时:

SELECT 
    *
FROM
    c
WHERE
    RegexMatch(c.stockNumber, @"\b\d{10}\b")

返回错误:

{
  "code": "BadRequest",
  "message": "One of the input values is invalid."
}

期望结果:

{
  "id": "abc",
  "stockNumber": "1001234567"
}

问题原因

Cosmos DB的RegexMatch函数基于.NET正则引擎,但在Cosmos查询字符串中,反斜杠需要双重转义,原查询的写法不符合语法要求,导致解析失败。另外,对于纯数字的字段,用^(字符串起始)和$(字符串结束)限定匹配范围,比单词边界\b更精准。

解决方案

方案1:首尾锚点精准匹配

使用^和$限定整个字符串为10位数字,同时对反斜杠双重转义:

SELECT 
    *
FROM
    c
WHERE
    RegexMatch(c.stockNumber, "^\\d{10}$")

方案2:转义单词边界反斜杠

若要保留\b写法,需将所有反斜杠双重转义:

SELECT 
    *
FROM
    c
WHERE
    RegexMatch(c.stockNumber, "\\b\\d{10}\\b")

参考说明

根据Azure Cosmos DB官方文档:RegexMatch函数用于验证字符串是否匹配指定正则表达式,依赖.NET正则引擎。在Cosmos查询的字符串字面量中,所有反斜杠必须双重转义,否则会被识别为普通转义字符,而非正则表达式的组成部分。

内容的提问来源于stack exchange,提问作者GThree

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 13:55:26