正则表达式预览

适用于:SQL Server 2025(17.x) 预览版Azure SQL 数据库Azure SQL 托管实例Microsoft Fabric 预览版中的 SQL 数据库

本文介绍 SQL Server 的正则表达式。

Note

作为预览版功能,本文中介绍的技术受制于 Microsoft Azure 预览版补充使用条款

正则表达式(或简称regex)是一种定义文本搜索模式的字符序列。 各种不同的任务(包括模式匹配、数据验证、数据转换和查询)通常都会用到正则表达式。 它提供了一种灵活且高效的方法来搜索、操作和处理复杂的数据操作。

Note

正则表达式在配置了 Always-up-to-date 更新策略的 Azure SQL 托管实例中可用。

正则表达式的此实现基于 RE2 正则表达式库。 有关详细信息,请访问 RE2 正则表达式语法

For example:

Function Description
REGEXP_LIKE 返回一个布尔值,指示文本输入是否与正则表达式模式匹配。
REGEXP_REPLACE 在找到正则表达式模式的位置用替换字符串替换源字符串,返回修改后的源字符串。
REGEXP_SUBSTR 根据正则表达式模式提取字符串的一部分。

返回与正则表达式模式匹配的子字符串的第 N 个匹配项。
REGEXP_INSTR 返回匹配子字符串的起始位置或结束位置,具体取决于提供的选项。
REGEXP_COUNT 返回正则表达式模式在字符串中出现的次数。
REGEXP_MATCHES 返回一个表格,其中包括与字符串的正则表达式模式匹配的已捕获子字符串。 如果找不到匹配项,该函数将不返回任何行。
REGEXP_SPLIT_TO_TABLE 返回一个表格,其中包含根据正则表达式模式分割和分隔的字符串。 如果与模式不匹配,该函数将返回字符串。

正则表达式可以由具有特殊含义和函数的文本字符和元字符组成。

简单的正则表达式是单个文本字符。 字符与自身匹配,元字符除外。 元字符包括*、、+?(、或)|。 若要匹配元字符,请使用反斜杠对其进行转义。 例如, \* 匹配文本星号 (*) 字符。

接受的正则表达式字符

单个字符表达式

单字符表达式的类型 Examples
任何字符,可能包括换行符 (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]

Literal characters

  • Letters
  • Numbers
  • Symbols

Metacharacters

  • * 匹配前一个字符的零次或多次出现
  • ^ 匹配行的开头

Groupings

使用以下命令对模式的各个部分进行分组和捕获:

  • 括弧 ( )
  • 方括号 [ ]
  • 大括号 { }

Flags

使用标志修改表达式行为。 For example:

  • i
  • m
  • s
  • c

此实现支持 RE2 后的正则表达式的 POSIX 标准,并支持正则表达式语法的 PCRE/PCRE2 风格,该语法与大多数新式正则表达式引擎和工具兼容。 正则表达式有不同的风格,例如 POSIX、ANSI、Perl 和 PCRE,具有不同的语法和功能。

Requirements

  • SQL 客户端工具,例如 Azure Data Studio、SQL Server Management Studio 或 Visual Studio Code。
  • SQL 语法和查询的基础知识。
  • 基本了解正则表达式语法和概念。

FAQ

使用正则表达式对性能有何影响?

正则表达式查询可能会产生性能影响,具体取决于正则表达式模式的复杂性、文本数据的大小以及所涉及的行数。 可以使用执行计划和统计信息来监视和优化正则表达式查询的性能。

已知问题、行为和限制

以下是此预览版当前不支持的项目:

  • LOB 数据类型(varchar(max)nvarchar(max)),适用于 string_expressions
  • 内存优化 OLTP 表不支持正则表达式函数