MariaDB REGEXP 运算符使用指南

在 MariaDB 中, REGEXP 操作符检查一个字符串和一个正则表达式是否匹配。

REGEXP 操作符可以检查字符串的部分是否与模式匹配,这与 LIKE 不同。

REGEXP 运算符的否定操作是 NOT REGEXP

REGEXP 运算符与 RLIKE 完全相同。

MariaDB REGEXP 语法

这里是 MariaDB REGEXP 的语法:

str REGEXP regexp

参数

str
必需的。一个字符串。
regexp
必需的。正则表达式。

返回值

如果字符串 str 和正则表达式 regexp 匹配, MariaDB REGEXP 返回 1,否则 REGEXP 返回 0

如果任意一个参数为 NULLREGEXP 返回 NULL

REGEXP 不缺分大小写。

正则表达式基础知识

正则表达式提供了许多通配符来匹配不同数量的字符,下表是一个简单的介绍:

字符 描述
^ 匹配输入字符串的开始位置。
$ 匹配输入字符串的结束位置。
* 匹配前面的子表达式零次或多次。
+ 匹配前面的子表达式一次或多次。
? 匹配前面的子表达式零次或一次。
{n} n 是一个非负整数。匹配前面的子表达式 n 次。
{n,} n 是一个非负整数。匹配前面的子表达式至少 n 次。
{n,m} mn 均为非负整数,其中 n<=m。最少匹配 n 次且最多匹配 m 次。
[xyz] 匹配字符的集合。
[^xyz] 排除字符的集合。
[a-z] 匹配字符的范围。
[^a-z] 排除字符的范围。
\b 匹配一个单词边界,也就是指单词和空格间的位置。
\B 匹配非单词边界。
\d 匹配一个数字字符。等价于 [0-9]
\D 匹配一个非数字字符。等价于 [^0-9]
\f 匹配一个换页符。等价于 \x0c\cL
\n 匹配一个换行符。等价于 \x0a\cJ
\r 匹配一个回车符。等价于 \x0d\cM
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]
\S 匹配任何非空白字符。等价于[^ \f\n\r\t\v]
\t 匹配一个制表符。等价于 \x09\cI
\v 匹配一个垂直制表符。等价于 \x0b\cK
\w 匹配包括下划线的任何单词字符。等价于 [A-Za-z0-9_]
\W 匹配任何非单词字符。等价于 [^A-Za-z0-9_]

具体的字符匹配字符本身。

MariaDB REGEXP 例子

下面是几个有关 REGEXP 的示例。

基本用法

SELECT
  'ab' REGEXP 'a',
  'ab' REGEXP 'b',
  'ab' REGEXP 'c';

输出:

+-----------------+-----------------+-----------------+
| 'ab' REGEXP 'a' | 'ab' REGEXP 'b' | 'ab' REGEXP 'c' |
+-----------------+-----------------+-----------------+
|               1 |               1 |               0 |
+-----------------+-----------------+-----------------+

在本示例中, abc 都是正则表达式。 'ab' 字符串中能匹配到 ab,但是不能匹配到 c

匹配任意字符

SELECT
  'ab' REGEXP '.',
  'ab' REGEXP '.*';

输出:

+-----------------+------------------+
| 'ab' REGEXP '.' | 'ab' REGEXP '.*' |
+-----------------+------------------+
|               1 |                1 |
+-----------------+------------------+

在本示例中:

  • . 匹配任意字符。
  • .* 匹配任意数量的任意字符。

匹配字符串的开头

通配符 ^ 匹配字符串的开头,如下:

SELECT
  'Hello' REGEXP '^H',
  'Hello' REGEXP '^A';

输出:

+---------------------+---------------------+
| 'Hello' REGEXP '^H' | 'Hello' REGEXP '^A' |
+---------------------+---------------------+
|                   1 |                   0 |
+---------------------+---------------------+

在本示例中,^H 匹配 H 开头的字符串,因此 'Hello' REGEXP '^H' 返回 1, 而 'Hello' REGEXP '^A' 返回 0

匹配字符串的结尾

通配符 $ 匹配字符串的结尾,如下:

SELECT
  'Hello' REGEXP 'lo$',
  'Hello' REGEXP 'lH$';

输出:

+----------------------+----------------------+
| 'Hello' REGEXP 'lo$' | 'Hello' REGEXP 'lH$' |
+----------------------+----------------------+
|                    1 |                    0 |
+----------------------+----------------------+

在本示例中,lo$ 匹配 lo 结尾的字符串,因此 'Hello' REGEXP 'lo$' 返回 1, 而 'Hello' REGEXP 'lH$' 返回 0

匹配数字

通配符 \d 匹配数字,通配符 \D 匹配数字,如下:

SELECT
  '123' REGEXP '^\\d+$',
  'abc' REGEXP '^\\D+$';

输出:

+-----------------------+-----------------------+
| '123' REGEXP '^\\d+$' | 'abc' REGEXP '^\\D+$' |
+-----------------------+-----------------------+
|                     1 |                     1 |
+-----------------------+-----------------------+

您可以使用 [0-9] 代替 \\d[^0-9] 代替 \\D

NULL 值

如果表达式或模式为 NULL,则结果为 NULL

SELECT
  null REGEXP '.*',
  'abc' REGEXP null;

输出:

+------------------+-------------------+
| null REGEXP '.*' | 'abc' REGEXP null |
+------------------+-------------------+
|             NULL |              NULL |
+------------------+-------------------+

结论

在 MariaDB 中, REGEXP 操作符检查一个字符串和一个正则表达式是否匹配。