很多数据库系统都支持标准SQL模式的查询,因此它具有一定的可移植性,但是它也有一定的局限性,例如可以使用标准SQL的LIKE ‘%abc%’找所有包含’abc’的字符串,却很难实现查询包含a,b或c中任意一个字母的字符串,MySQL提供非常强大的基于正则表达式的模式匹配操作REGEXP & NOT REGEXP,Oracle 10g也引入了正则表达式。
^ | 匹配字符串的开始部分 |
$ | 匹配字符串的结尾部分 |
. | 匹配任何字符(包括回车和换行) |
[…] [a-z] [0-9] [a-z0-9] | 括号(集合)内任意一个字符 |
[^…] | 除了括号内所列字符之外的任意一个字符 |
p1 | p2 | p3 | p1、p2或p3中任意一个模式串成立 |
* | 匹配0或多个*之前的任何序列 |
+ | 匹配1或多个+之前的任何序列 |
{n} | N个{n}之前的任何序列 |
{m,n} | 最少m个,最多n个,{m,n}之前的任何序列 |
mysql> SELECT name FROM metal WHERE name REGEXP '^co';
+--------+
| name |
+--------+
| copper |
+--------+
mysql> SELECT name FROM metal WHERE name REGEXP 'er$';
+--------+
| name |
+--------+
| copper |
| silver |
+--------+
mysql> SELECT name FROM metal WHERE name REGEXP 'er';
+---------+
| name |
+---------+
| copper |
| mercury |
| silver |
+---------+
mysql> SELECT name FROM metal WHERE name REGEXP '^..pp';
+--------+
| name |
+--------+
| copper |
+--------+