MySQL 正则表达式

我们已经了解到MySQL可以通过LIKE ...%来进行模糊匹配。

MySQL同样也支持其他正则表达式的匹配,MySQL中使用REGEXP操作符来进行正则表达式匹配。

下表中的正则模式可应用于REGEXP操作符中

模式 描述
^ 匹配输入字符串的开始位置。
如果设置了 RegExp 对象的 Multiline 属性,^也匹配\n\r之后的位置
$ 匹配输入字符串的结束位置。
如果设置了RegExp 对象的 Multiline 属性,$ 也匹配\n\r之前的位置
. 匹配除\n之外的任何单个字符。
要匹配包括\n在内的任何字符,请使用像[.\n]的模式
[...] 字符集合。匹配所包含的任意一个字符。
例如,[abc]可以匹配plain中的a
[^...] 负值字符集合。匹配未包含的任意字符。
例如,[^abc]可以匹配plain中的p
p1\|p2\|p3 匹配 p1 或 p2 或 p3。
例如,z\|food 能匹配zfood(z\|f)ood则匹配zoodfood
* 匹配前面的子表达式零次或多次。
例如,zo*能匹配z以及zoo*等价于{0,}
+ 匹配前面的子表达式一次或多次。
例如,zo+能匹配zo以及zoo,但不能匹配z。+ 等价于{1,}
{n} n是一个非负整数。匹配确定的n次。
例如:o{2}不能匹配Bob中的o,但是能匹配food中的两个 o
{n,m} mn均为非负整数,其中n <= m
最少匹配n次且最多匹配m

使用实例

了解以上的正则需求后,我们就可以根据自己的需求来编写带有正则表达式的SQL语句。以下列出几个小实例(表名:person_tbl)来加深我们的理解:

查找name字段中以'st'为开头的所有数据:

mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';

查找name字段中以'ok'为结尾的所有数据:

mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';

查找name字段中包含'mar'字符串的所有数据:

mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';

查找name字段中以元音字符开头或以'ok'字符串结尾的所有数据:

mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/02/24/mysql-regular-expressions/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
MySQL 正则表达式
我们已经了解到MySQL可以通过LIKE ...%来进行模糊匹配。 MySQL同样也支持其他正则表达式的匹配,MySQL中使用REGEXP操作符来进行正则表达式匹配。 下表中的正则……
<<上一篇
下一篇>>
文章目录
关闭
目 录