Skip to content

正则表达式

正则表达式相关函数及操作符

REGEXP

语法:
expr REGEXP pattern

REGEXP 是正则表达式匹配操作符,用于匹配字符串的模式。它是一个二元操作符,左操作数是要匹配的字符串,右操作数是正则表达式模式。如果匹配成功,返回 1,否则返回 0。如果任意一个操作数为 NULL,则返回 NULL。

匹配时忽略大小写

示例:

sql
SELECT 'Monty!' REGEXP '.*' AS result;
+--------+
| result |
+--------+
|      1 |
+--------+

SELECT '1' REGEXP '^[[:digit:]]+$' AS result;
+--------+
| result |
+--------+
|      1 |
+--------+

SELECT 'a' REGEXP '^[[:digit:]]+$' AS result;
+--------+
| result |
+--------+
|      0 |
+--------+

SELECT 'ABC' REGEXP 'a.*' AS result; -- 忽略大小写
+--------+
| result |
+--------+
|      1 |
+--------+

NOT REGEXP

语法:
expr NOT REGEXP pattern

NOT REGEXPREGEXP 的否定形式。

正则表达式语法

单个字符

字符说明
.任意字符
[xyz]字符集,匹配所包含的任意一个字符
[^xyz]负值字符集,匹配未包含的任意字符
\d数字:[0-9]
\D非数字:[^0-9]
[[:alpha:]]字母:[A-Za-z]
[[:^alpha:]]非字母:[^A-Za-z]
\pNUnicode 字符集(单个字符)
\p{Greek}Unicode 字符集(单个字符)
\PN非 Unicode 字符集(单个字符)
\P{Greek}非 Unicode 字符集(单个字符)

组合

字符说明
xy匹配x后跟y
x|y匹配xy

重复

字符说明
x*匹配 0 个或多个x,优先匹配更多的x
x+匹配 1 个或多个x,优先匹配更多的x
x?匹配 0 个或 1 个x,优先匹配 1 个x
x{n,m}匹配 n 个或 n+1 个或...或 m 个x,优先匹配更多的x
x{n,}匹配 n 个或 n+1 个或...个x,优先匹配更多的x
x{n}匹配 n 个x
x*?匹配 0 个或多个x,优先匹配更少的x
x+?匹配 1 个或多个x,优先匹配更少的x
x??匹配 0 个或 1 个x,优先匹配 0 个x
x{n,m}?匹配 n 个或 n+1 个或...或 m 个x,优先匹配更少的x
x{n,}?匹配 n 个或 n+1 个或...个x,优先匹配更少的x
x{n}?匹配 n 个x,优先匹配 n 个x

空字符串

字符说明
^匹配文本或行首(标志m=true
$匹配文本或行尾(类似\z而不是\Z)或行尾(标志m=true
\A匹配文本首
\b匹配 ASCII 单词边界(\w一侧为\W\A\z
\B匹配非 ASCII 单词边界
\z匹配文本尾

转义序列

字符说明
\a响铃(\007
\f换页(\014
\t水平制表符(\011
\n换行(\012
\r回车(\015
\v垂直制表符(\013
\*字面量*,对于任何标点符号*
\123八进制字符代码(最多三位)
\x7F十六进制字符代码(两位)
\x{10FFFF}十六进制字符代码
\Q...\E字面量文本...即使...包含标点符号

字符类元素

字符说明
x单个字符
A-Z字符范围(包含)
\dPerl 字符类
[:foo:]ASCII 字符类 foo
\p{Foo}Unicode 字符类 Foo
\pFUnicode 字符类 F(单字母名称)

命名字符类作为字符类元素

字符说明
[\d]数字(\d
[^\d]非数字(\D
[\D]非数字(\D
[^\D]非非数字(\d
[[:name:]]字符类内的命名 ASCII 类([:name:]
[^[:name:]]非字符类内的命名 ASCII 类([:^name:]
[\p{Name}]字符类内的命名 Unicode 属性(\p{Name}
[^p{Name}]非字符类内的命名 Unicode 属性(\P{Name}

Perl 字符类(仅限 ASCII)

字符说明
\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 字符类

字符说明
[[:alnum:]]字母数字([0-9A-Za-z]
[[:alpha:]]字母([A-Za-z]
[[:ascii:]]ASCII([\x00-\x7F]
[[:blank:]]空白([\t ]
[[:cntrl:]]控制字符([\x00-\x1F\x7F]
[[:digit:]]数字([0-9]
[[:graph:]]图形字符([!-~]
[[:lower:]]小写字母([a-z]
[[:print:]]可打印字符([ -~]
[[:punct:]]标点符号([!-/:-@[-{-~]`)
[[:space:]]空白([\t\n\v\f\r ]
[[:upper:]]大写字母([A-Z]
[[:word:]]单词字符([0-9A-Za-z_]
[[:xdigit:]]十六进制数字([0-9A-Fa-f]