mysql从头学一 1.1正则表达式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/insis_mo/article/details/84972531

正则表达式的使用
正则表达式(Regular Expression),是指一个用来描述或者匹配一系列符合某个句法规则的
字符串的单个字符串。在很多文本编辑器或其他工具裡,正则表达式通常被用来检索和/或
替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操
作。例如,在 Perl 中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初
是由 UNIX 中的工具软件(例如 SED 和 GREP)普及开的,通常缩写成“REGEX”或者“REGEXP”。
MySQL 利用 REGEXP 命令提供给用户扩展的正则表达式功能,REGEXP 实现的功能,类似 UNIX
上 GREP 和 SED 的功能,并且 REGEXP 在进行模式匹配时是区分大小写的。熟悉并掌握 REGEXP
的功能可以使模式匹配工作事半功倍。
MySQL 5.0 中可以使用的模式序列如表 17-1 所示。

 下面举一些例子来介绍常用正则表达式的使用方法。
 “^”在字符串的开始处进行匹配,返回结果为 1 表示匹配,返回结果为 0 表示不匹配。
下例中尝试匹配字符串“abcdefg”是否以字符“a”开始:
mysql> select 'abcdefg' REGEXP '^a';
+-----------------------+
| 'abcdefg' REGEXP '^a' |
+-----------------------+
| 1 |
+-----------------------+
1 row in set (0.39 sec)
 “$”在字符串的末尾处进行匹配,下例中尝试匹配字符串“abcdefg”
196
+--------------------------+
1 row in set (0.01 sec)
 “[^…]”匹配不出括号内的任意字符。和“[…]”刚好相反。下例中字符串“efg”和“X”
中如果有任何一个字符匹配不上“[XYZ]”中的任意一个字符,则返回 0;如果全部都能
匹配上,则返回 1。
mysql> select 'efg' REGEXP "[^XYZ]",'X' REGEXP "[^XYZ]";
+-----------------------+---------------------+
| 'efg' REGEXP "[^XYZ]" | 'X' REGEXP "[^XYZ]" |
+-----------------------+---------------------+
| 1 | 0 |
+-----------------------+---------------------+
1 row in set (0.00 sec)
上面我们介绍了正则表达式的常见使用方法。但是在实际工作中正则表达式到底什么地方会
用到呢?下面举一个实际的例子,使用正则表达式查询出使用 163.com 邮箱的用户和邮箱。
(1)创建测试数据:
mysql> create table t(name varchar(20),email varchar(40));
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t values('beijing','[email protected]');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t values('beijing126','[email protected]');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t values('beijing188','[email protected]');
Query OK, 1 row affected (0.00 sec)
mysql> select * from t;
+------------+-----------------+
| name | email |
+------------+-----------------+
| beijing | [email protected] |
| beijing126 | [email protected] |
| beijing188 | [email protected] |
+------------+-----------------+
3 rows in set (0.00 sec)
(2)使用正则表达式“$”和“[...]”进行匹配:
mysql> select name ,email from t where email REGEXP "@163[.,]com$";
+---------+-----------------+
| name | email |
+---------+-----------------+
| beijing | [email protected] |
197
+---------+-----------------+
1 row in set (0.00 sec)
从上例中可以看出,如果不使用正则表达式而使用普通的 LIKE 语句,则 WHERE 条件需要写
成如下格式:
email like “@163%.com” or email like “@163%,com”

猜你喜欢

转载自blog.csdn.net/insis_mo/article/details/84972531