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