正则表达式预览

适用于: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 表不支持正则表达式函数