随着过滤条件的复杂性的增加,WHERE子句的复杂性也会随着增加,这时候就需要使用相对简单的正则表达式。(一般情况下普通的判断语句也可以实现)
我们从一个非常简单的例子开始。下面的语句检索列 prod_name 包含文本 1000 的所有行:
除关键字 LIKE 被 REGEXP 替代外,这条语句看上去非常像使用LIKE 的语句。它告诉MySQL:REGEXP 后所跟的东西作为正则表达式(与文字正文 1000 匹配的一个正则表达式)处理。
在MySQL的正则表达式中,.表示匹配任意一个字符,例如:
OR匹配
匹配几个字符之一
匹配任何单一字符。但是,如果你只想匹配特定的字符,怎么办?可通过指定一组用 [ 和 ] 括起来的字符来完成,如下所示:
如果[]中需要匹配的字符过多,可以用范围表示:范围不限于完整的集合, [1-3] 和 [6-9] 也是合法的范围。此外,范围不一定只是数值的, [a-z] 匹配任意字母字符。
匹配特殊字符
我们已经看到 . 、 [] 、| 和 - 等,还有其他一些字符。请问,如果你需要匹配这些字符,应该怎么办呢?例如,如果要找出包含 . 字符的值,怎样搜索?直接搜索这些字符肯定是不可行的,为了匹配特殊字符,必须用 \\ 为前导。 \\- 表示查找 - , \\. 表示查找 .
匹配字符类
存在找出你自己经常使用的数字、所有字母字符或所有数字字母字符等的匹配。为更方便工作,可以使用预定义的字符集,称为字符类(character class)。
匹配多个实例
目前为止使用的所有正则表达式都试图匹配单次出现。但有时需要对匹配的数目进行更强的控制。例如,你可能需要寻找所有的数,不管数中包含多少数字,或者你可能想寻找一个单词并且还能够适应一个尾随的 s (如果存在),等等。
例如:
定位符
为了匹配特定位置的文本,需要使用定位符。
例如: