跳到主要内容

二十九、MySQL REGEXP 子句正则表达式查询

前面章节中我们已经了解到 MySQL 可以通过 LIKE ...% 子句来进行模糊匹配,但这都只是简单的模糊查询,也是速度最快的模糊查询

除此之外,MySQL 同样也支持其它正则表达式的匹配

MySQL 通过使用 REGEXP 操作符来进行正则表达式匹配

如果你了解过其它语言的正则表达式,比如 PHPPerl 等,那么你会对 MySQL 的正则表达式元字符非常熟悉,因为它们都类似

MySQL REGEXP 操作符支持以下几种元子符

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

MySQL 中正则表达式用的不多,但也有那么几个时刻还是很有用处的