适用于:SQL Server 2025 (17.x) 在
Microsoft Fabric 中预览
Azure SQL 数据库
Azure SQL 托管实例 SQL 数据库
本文介绍 SQL Server 的正则表达式。
注释
作为预览版功能,本文中介绍的技术受制于 Microsoft Azure 预览版补充使用条款。
正则表达式(或简称regex)是一种定义文本搜索模式的字符序列。 正则表达式通常用于各种任务,包括模式匹配、数据验证、数据转换和查询。 它提供了一种灵活且高效的方法来搜索、操作和处理复杂的数据操作。
正则表达式的此实现基于 RE2 正则表达式库。 有关详细信息,请访问 RE2 正则表达式语法。
例如:
功能 | DESCRIPTION |
---|---|
REGEXP_LIKE | 返回一个布尔值,该值指示文本输入是否与正则表达式模式匹配。 |
REGEXP_REPLACE | 返回由替换字符串替换的已修改源字符串,其中找到了正则表达式模式。 |
REGEXP_SUBSTR | 基于正则表达式模式提取字符串的一部分。 返回与正则表达式模式匹配的子字符串的第 N 个匹配项。 |
REGEXP_INSTR | 返回匹配子字符串的起始或结束位置,具体取决于提供的选项。 |
REGEXP_COUNT | 返回字符串中出现正则表达式模式的次数计数。 |
REGEXP_MATCHES | 返回与字符串匹配正则表达式模式的捕获子字符串表。 如果未找到匹配项,该函数将不返回任何行。 |
REGEXP_SPLIT_TO_TABLE | 返回由正则表达式模式分隔的字符串拆分表。 如果模式不匹配,该函数将返回字符串。 |
正则表达式可以由具有特殊含义和函数的文本字符和元字符组成。
简单的正则表达式是单个文本字符。 字符与自身匹配,元字符除外。 元字符包括*
、、+
、?
(
、或)
|
。 若要匹配元字符,请使用反斜杠对其进行转义。 例如, \*
匹配文本星号 (*
) 字符。
接受的正则表达式字符
单个字符表达式
单字符表达式的类型 | 例子 |
---|---|
任何字符,可能包括换行符(s = true) | . |
字符组 | [xyz] |
排除型字符组 | [^xyz] |
Perl 字符类 | \d |
排除型 Perl 字符组 | \D |
ASCII 字符类 | [[:alpha:]] |
排除型 ASCII 字符组 | [[:^alpha:]] |
Unicode 字符组(单字母名称) | \pN |
Unicode 字符组 | \p{Greek} |
排除型 Unicode 字符组(单字母名称) | \PN |
排除型 Unicode 字符组 | \P{Greek} |
Perl 字符类
下表列出了当前支持的 Perl 字符类。
Perl 字符组(仅限所有 ASCII 码) | DESCRIPTION |
---|---|
\d |
数字 ( [0-9] ) |
\D |
非数字([^0-9] ) |
\s |
空格 ( [\t\n\f\r ] ) |
\S |
非空格 ( [^\t\n\f\r ] ) |
\w |
单词字符 ( [0-9A-Za-z_] ) |
\W |
不是单词字符 ( [^0-9A-Za-z_] ) |
ASCII 字符组
下表列出了当前支持的 ASCII 字符类。
ASCII 字符组 | DESCRIPTION |
---|---|
[[:alnum:]] |
字母数字 ( [0-9A-Za-z] ) |
[[:alpha:]] |
字母 ([A-Za-z] ) |
[[:ascii:]] |
ASCII ( [\x00-\x7F] ) |
[[:blank:]] |
空白 ([\t ] ) |
[[:cntrl:]] |
控制 ( [\x00-\x1F\x7F] ) |
[[:digit:]] |
数字 ( [0-9] ) |
[[:graph:]] |
图形 ( [!-~] 或 [A-Za-z0-9!“#$%&’()*+,\-./:;<=>?@[\\\]^_`{|}~] ) |
[[:lower:]] |
小写 ( [a-z] ) |
[[:print:]] |
可打印 ( [ -~] 或 [ [:graph:]] ) |
[[:punct:]] |
标点符号 ( [!-/:-@[-\``{-~] ) |
[[:space:]] |
空格 ( [\t\n\v\f\r ] ) |
[[:upper:]] |
大写 ( [A-Z] ) |
[[:word:]] |
单词字符 ( [0-9A-Za-z_] ) |
[[:xdigit:]] |
十六进制数字 ( [0-9A-Fa-f] ) |
文本字符
- 信件
- 数字
- 符号
元字符
-
*
匹配上述字符的零个或多个匹配项 -
^
用于匹配行的开头
分组
使用以下命令对模式的各个部分进行分组和捕获:
- 括弧
( )
- 方括号
[ ]
- 大括号
{ }
旗帜
使用标志修改表达式行为。 例如:
i
m
s
c
此实现支持 RE2 后的正则表达式的 POSIX 标准,并支持正则表达式语法的 PCRE/PCRE2 风格,该语法与大多数新式正则表达式引擎和工具兼容。 正则表达式有不同的风格,例如 POSIX、ANSI、Perl 和 PCRE,具有不同的语法和功能。
要求
- SQL 客户端工具,例如 Azure Data Studio、SQL Server Management Studio 或 Visual Studio Code。
- SQL 语法和查询的基础知识。
- 基本了解正则表达式语法和概念。
常见问题
使用正则表达式对性能有何影响?
正则表达式查询可能会产生性能影响,具体取决于正则表达式模式的复杂性、文本数据的大小和涉及的行数。 可以使用执行计划和统计信息来监视和优化正则表达式查询的性能。
已知问题、行为和限制
以下是此预览版当前不支持的项目:
- LOB 数据类型(varchar(max) 或 nvarchar(max))
string_expressions
- 内存优化 OLTP 表不支持正则表达式函数