适用于:Microsoft Fabric 中的 SQL Server 2025 (17.x)
Azure SQL 数据库
Azure SQL 托管实例 SQL 数据库
REGEXP_MATCHES表值正则表达式函数返回一个捕获的子字符串表,这些子字符串与正则表达式模式匹配。 如果未找到匹配项,该函数将不返回任何行。
REGEXP_MATCHES
(
string_expression,
pattern_expression [ , flags ]
)
Arguments
string_expression
字符串的表达式。
可以是字符串的常量、变量或列。
数据类型: char、 nchar、 varchar 或 nvarchar。
Note
这些 REGEXP_* 函数支持LOB类型(varchar(max) 和 nvarchar(max)), string_expression 参数最多可达2 MB。
pattern_expression
要匹配的正则表达式模式。 通常是文本文本。
数据类型: char、 nchar、 varchar 或 nvarchar。 pattern_expression 支持最大字符长度为 8,000 字节。
flags
指定用于搜索匹配项的修饰符的一个或多个字符。 类型为 varchar 或 char,最多包含 30 个字符。
例如,ims。 默认值为 c。 如果提供了空字符串 (' ') ,它将被视为默认值 ('c')。 提供 c 或任何其他字符表达式。 如果标志包含多个相互矛盾的字符,则 SQL Server 使用最后一个字符。
例如,如果指定 ic 正则表达式返回区分大小写的匹配。
如果值包含除 受支持标志值中列出的字符以外的字符,则查询将返回如下例所示的错误:
Invalid flag provided. '<invalid character>' are not valid flags. Only {c,i,s,m} flags are valid.
支持的标志值
| Flag | Description |
|---|---|
i |
不区分大小写 (默认值 false) |
m |
多行模式: ^ 和 $ 匹配开始/结束行,以及开始/结束文本(默认值 false) |
s |
让 . 匹配 \n (默认值 false) |
c |
区分大小写(默认值 true) |
Returns
返回表格结果,如下所示:
| 列名 | 数据类型 | Description |
|---|---|---|
match_id |
bigint | 匹配字词的序列。 |
start_position |
int | 起始索引位置。 |
end_position |
int | 结束索引位置。 |
match_value |
与 string_expressionvarchar 相同的类型 |
匹配表达式。 |
substring_matches |
json | 描述匹配项的 JSON 文档。 |
平台支持
需要数据库兼容性级别 170。 要设置数据库兼容性级别,请审查 ALTER DATABASE (Transact-SQL)兼容性级别。 如果启用了 ALLOW_BUILTIN_TVF_IN_ALL_COMPAT_LEVELS 数据库范围配置,兼容性要求就不适用。
- 在Azure SQL 托管实例中,T-SQL正则表达式函数仅通过SQL Server 2025或Always-up-to-date更新策略提供。
- T-SQL 正则表达式函数可在 Azure SQL 数据库、SQL 数据库(Fabric)中使用,并从 SQL Server 2025 开始使用。
- T-SQL 正则表达式函数在 SQL Server 2022 及更早版本中不可用。
- 在 Fabric Data Warehouse 中,不支持正则表达式的表值函数
REGEXP_MATCHES和REGEXP_SPLIT_TO_TABLE。 T-SQL 正则表达式标量函数作为预览功能在Fabric Data Warehouse中提供。
Examples
从 'Learning #AzureSQL #AzureSQLDB' 该开头返回表格结果,该结果后跟一 # 个或多个字母数字字符 (A-Z, a-z, 0-9) 或下划线 (_)。
SELECT *
FROM REGEXP_MATCHES ('Learning #AzureSQL #AzureSQLDB', '#([A-Za-z0-9_]+)');
match_id start_position end_position match_value substring_matches
1 10 18 #AzureSQL [{"value":"AzureSQL","start":11,"length":8}]
2 20 30 #AzureSQLDB [{"value":"AzureSQLDB","start":21,"length":10}]
从 ABC 该匹配字符串返回字符串,这些字符串以字母 A 开头,后跟两个字符。
SELECT *
FROM REGEXP_MATCHES ('ABC', '^(A)(..)$');
match_id start_position end_position match_value substring_matches
1 1 3 ABC [{"value":"A","start":1,"length":1},{"value":"BC","start":2,"length":2}]