MariaDB REGEXP 函数用于执行正则表达式匹配。如果表达式与pattern指定的正则表达式匹配,则返回1,否则返回0。如果表达式或pattern为 NULL,则返回值为 NULL。
REGEXP 函数执行不区分大小写的匹配,除非与二进制字符串一起使用。
REGEXP function 是 RLIKE 函数的同义词。
语法
expression REGEXP pattern
参数
expression | 必需。 指定字符表达式,例如列或字段。 |
pattern | 必需。 指定正则表达式匹配信息。请参阅下表了解模式语法。 |
正则表达式模式
符号 | 描述 |
---|---|
^ | 匹配字符串的开头。 |
$ | 匹配字符串的结尾字符串。 |
* | 匹配零次或多次出现。 |
+ | 匹配一次或多次出现。 |
? | 匹配零次或一次出现。 |
. | 匹配除 NULL 之外的任何字符。 |
| | 像"OR"一样使用来指定多个替代字符。 |
[ ] | 匹配 [] 内指定的任何单个字符。 |
[^ ] | 匹配 [] 内未指定的任何单个字符。 |
- | 表示字符范围。 |
( ) | 用于将表达式分组为子表达式。 |
{m} | 匹配 m |
{m,} | 匹配至少 m 次。 |
{m,n} | 匹配至少 m 次,但不超过 n 次。 |
\n | n 是 1 到 9 之间的数字。匹配找到的第 n 个子表达式在 ( ) 内遇到 \n 之前。 |
\d | 匹配数字字符。 |
\D | 匹配非数字字符。 |
\w | 匹配单词字符。 |
\W | 匹配非单词字符。 |
\s | 匹配空白字符。 |
\s | 匹配空白字符。 |
\S | 匹配非空白字符。 |
*? | 匹配前面的模式出现零次或多次。 |
+? | 匹配前面的模式出现一次或多次。 |
?? | 匹配前面的模式零次或一次出现。 |
? | 匹配前面的模式n 次。 |
? | 与前面的模式匹配至少 n 次。 |
? | 匹配前面的模式至少 n 次,但不超过 m 次。 |
[..] | 匹配一种排序规则可以是多个字符的元素。 |
[=character_class=] | 表示一个等价类。它匹配具有相同排序值的所有字符,包括其自身。 |
[:character_class:] | 表示匹配属于该字符的所有字符的字符类 |
标准类列表名称
字符类名称 | 含义 |
---|---|
alnum | 字母数字字符 |
alpha | 字母字符 |
blank | 空白字符 |
cntrl | 控制字符 |
digit | 数字字符 |
graph | 图形字符 |
lower | 小写字母字符 |
图形或空格字符 | |
punct | 标点符号 |
space | 空格、制表符、换行符和回车符 |
upper | 大写字母字符 |
xdigit | 十六进制数字字符 |
示例:匹配多个替代项
考虑一个名为Employee的表。以下查询用于从此表中获取 Name 包含"Ja"、"Je"或"Ji"的所有记录。要为模式的第二个字符指定多个替代字符,请使用 |。
SELECT * FROM Employee
WHERE Name REGEXP 'J(a|e|i)';
示例:匹配开始
考虑一个名为Employee 的表。下面的查询用于从该表中获取 Name 以"J"开头的所有记录。这里,^ 用于指定模式的起始字符。
SELECT * FROM Employee
WHERE Name REGEXP '^J';
示例:结尾匹配
考虑一个名为Employee的表。以下查询用于从此表中获取 Name 以"n"结尾的所有记录。这里,$用于指定模式的结束字符。
SELECT * FROM Employee
WHERE Name REGEXP 'n$';
示例:匹配列表
考虑一个名为 Employee 的表。以下查询用于从此表中获取 Name 包含"Ja"、"Jb"、"Jc"或"Jd"的所有记录。要指定模式的第二个字符,请使用 [ ],在本例中可以是"a"、"b"、"c"或"d"。
SELECT * FROM Employee
WHERE Name REGEXP 'J[a-d]';
示例:非匹配列表
考虑一个名为Employee的表。以下查询用于从此表中获取 Name 不包含"Ja"、"Jb"、"Jc"或"Jd"的所有记录。 [ ^ ] 模式用于指定此处未列出的字符。
SELECT * FROM Employee
WHERE Name REGEXP 'J[^a-d]';
示例:匹配字符类
考虑一个名为 Employee 的表。以下查询用于从此表中获取所有记录,其中 Address 包含以 123 开头的模式,其余字符为字母数字字符。
SELECT * FROM Employee
WHERE Address REGEXP '123[[:alnum:]]*';
示例:转义字符
要在使用 REGEXP 函数时转义特殊字符,特殊字符前面应有两个反斜杠 \\。考虑一个名为 Employee 的表。下面的查询可用于获取该表中 Address 包含 ( 字符的所有记录。
SELECT * FROM Employee
WHERE Address REGEXP '\\(';