二十九、MySQL REGEXP 子句正则表达式查询
前面章节中我们已经了解到 MySQL 可以通过 LIKE ...% 子句来进行模糊匹配,但这都只是简单的模糊查询,也是速度最快的模糊查询
除此之外,MySQL 同样也支持其它正则表达式的匹配
MySQL 通过使用 REGEXP 操作符来进行正则表达式匹配
如果你了解过其它语言的正则表达式,比如 PHP 或 Perl 等,那么你会对 MySQL 的正则表达式元字符非常熟悉,因为它们都类似
MySQL REGEXP 操作符支持以下几种元子符
| 元字符 | 描述 |
|---|---|
| ^ | 匹配输入字符串的开始位置 如果设置了 Multiline 属性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置 |
| $ | 匹配输入字符串的结束位置 如果设置了 Multiline 属性,$ 也匹配 ‘\n’ 或 ‘\r’ 之前的位置 |
| . | 匹配除 “\n” 之外的任何单个字符 如果要匹配包括 ‘\n’ 在内的任何字符,请使用象 ‘[.\n]’ 的模式 |
| […] | 字符集合。匹配所包含的任意一个字符 例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’ |
| [^…] | 负值字符集合。匹配未包含的任意字符 例如, ‘[^abc]’ 可以匹配 “plain” 中的’p’ |
| p1 | p2 |
| * | 匹配前面的子表达式零次或多次 例如,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 中正则表达式用的不多,但也有那么几个时刻还是很有用处的