转载地址:http://www.2cto.com/database/201212/173869.html

一、正则表达式介绍
  www.2cto.com  
正则表达式是用来匹配文本的特殊的串(字符集合)。
 
二、使用MySQL正则表达式
 
1、MySQL仅仅支持多数正则表达式实现的一个很小的子集。
 
2、LIKE匹配整个列值;而REGEXP匹配列值的子串,如果被匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回。看下面的例子:
  www.2cto.com  
[sql] 
mysql>select username from v9_admin where username like 'space';  
Emptyset (0.00 sec)  
   
mysql>select username from v9_admin where username REGEXP 'space';  
+-----------+  
|username  |  
+-----------+  
|warmspace |  
+-----------+  
1 rowin set (0.02 sec)  
3、默认MySQL中的正则表达式匹配不区分大小写,可使用BINARY关键字区分大小写,如
 
[sql] 
mysql>select username from v9_admin  
    -> where username REGEXP BINARY'SPACCE';  
Emptyset (0.04 sec)  
4、进行OR匹配:为搜索两个串之一,使用|,如下所示:
 
[sql] 
mysql>select roleid from v9_admin_role  
    -> where roleid REGEXP '1|3';  
+--------+  
|roleid |  
+--------+  
|      1 |  
|      3 |  
+--------+  
2 rowsin set (0.00 sec)  
5、匹配几个字符之一:匹配任何单一字符。如下所示:
 
[sql] 
mysql>select name from v9_collection_node  
    -> where name REGEXP '005-[123]';  
+-----------------+  
|name            |  
+-----------------+  
|101-02-01-005-2 |  
|101-02-01-005-1 |  
|101-02-01-005-3 |  
+-----------------+  
3 rowsin set (0.00 sec)  
正如所见,[]是另一种形式的OR语句。'005-[123]'与’005-[1|2|3]’是等价的。
 
匹配除给定字符外的字符:
 
[sql] 
mysql>select name from v9_collection_node  
    -> where name REGEXP '005-[^123]';  
+-------------------+  
|name              |  
+-------------------+  
|101-02-01-005-4.2 |  
|101-02-01-005-4   |  
|101-02-01-005-5   |  
+-------------------+  
3 rowsin set (0.00 sec)  
6、可使用-来定义一个范围。如[1-9],[a-b]。
 
[sql] 
mysql>select name from v9_collection_node  
    -> where name REGEXP '005-[1-3]';  
+-----------------+  
|name            |  
+-----------------+  
|101-02-01-005-2 |  
|101-02-01-005-1 |  
|101-02-01-005-3 |  
+-----------------+  
3 rowsin set (0.00 sec)  
7、为了匹配特殊字符,必须用\\为前导,例如\\-,\\.等。这种处理即转义(escaping)。
 
多数正则表达式实现使用单个反斜杠转义特殊字符,但MYSQL要求两个(MYSQL自己解释一个,正则表达式库解释另一个)。
 
\\也用来引用元字符(具有特殊含义的字符),如下表:
 
 
8、为了更方便工作,可以使用预定义的字符集,称为字符类(character class)。
 
[sql] 
mysql> select name fromv9_collection_node  
   -> where name REGEXP '[[:digit:]]';  
+-------------------+  
| name              |  
+-------------------+  
| 101-10-01-002-1   |  
| 101-02-01-005-4.2 |  
| 101-02-01-005-2   |  
| 101-02-01-005-1   |  
| 101-02-01-005-3   |  
| 101-02-01-005-4   |  
| 101-02-01-005-5   |  
| 101-10-01-002-2   |  
| 101-11-04-001-1   |  
+-------------------+  
9 rowsin set (0.00 sec)  

 
9、使用正则表达式重复元字符匹配多个实例:
 
[sql] 
mysql> select name fromv9_collection_node  
   -> where name REGEXP '1{2}';  
+-----------------+  
| name            |  
+-----------------+  
| 101-11-04-001-1 |  
+-----------------+  
1 rowin set (0.00 sec)  

 
10、定位符(为了匹配特定位置的文本):
 
[sql] 
mysql> select name from v9_collection_node  
    -> where name REGEXP '2$';  
+-------------------+  
| name              |  
+-------------------+  
| 101-02-01-005-4.2 |  
| 101-02-01-005-2   |  
| 101-10-01-002-2   |  
+-------------------+  
3 rows in set (0.00 sec)  

 
11、使REGEXP起类似LIKE的作用,它们的区别在于LIKE匹配整个串而REGEXP匹配子串。利用定位符,通过用^开始每个表达式,用$结束每个表达式。
 
12、简单的正则表达式测试:可以在不使用数据库表的情况下用SELECT来测试正则表达式。REGEXP检查总是返回0或1(匹配)。
 
[sql] 
mysql> select 'hello' REGEXP'[0-9]';  
+------------------------+  
| 'hello' REGEXP '[0-9]' |  
+------------------------+  
|                      0 |  
+------------------------+  
1 row in set (0.00 sec) 

【转】MYSQL入门学习之二:使用正则表达式搜索的更多相关文章

  1. 【数据库】2.0 MySQL入门学习(二)——如何获得MySQL以及MySQL安装

    1.0 如何获得MySQL: www.oracle.com https://dev.mysql.com/downloads/ 2.0 例如进入Oracle官网,找到MySQL: 进入页面后,切换到“资 ...

  2. 【转】MYSQL入门学习之三:全文本搜索

    转载地址:http://www.2cto.com/database/201212/173873.html 一.理解全文本搜索   www.2cto.com   1.MyISAM支持全文本搜索,而Inn ...

  3. 【数据库】9.0 MySQL入门学习(九)——获得数据库和表的信息、日期计算、查询、选择特殊列

    1.0 SELECT语句用来从数据表中检索信息. SELECT what_to_select FROM which_table WHERE conditions_to_satisfy; what_to ...

  4. 【数据库】7.0 MySQL入门学习(七)——MySQL基本指令:帮助、清除输入、查询等

    1.0 help == ? 帮助指令,查询某个指令的解释.用法.说明等.详情参考博文: [数据库]6.0 MySQL入门学习(六)——MySQL启动与停止.官方手册.文档查询 https://www. ...

  5. 【数据库】4.0 MySQL入门学习(四)——linux系统环境下MySQL安装

    1.0 我的操作系统是CentOS Linux release 7.6.1810  (Core) 系统详细信息如下: Linux version 3.10.0-957.1.3.el7.x86_64 ( ...

  6. 【数据库】3.0 MySQL入门学习(三)——Windows系统环境下MySQL安装

    1.0 我的操作系统是window10 专业版 64位.,不过至少windows7以上系统都是一样的. 关于MySQL如何下载,请参考博文: [数据库]2.0 如何获得MySQL以及MySQL安装 h ...

  7. 【转载】salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句

    salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句 salesforce如果简单的说可以大概分成两个部分:Apex,VisualForce Page. 其中Apex ...

  8. MyBatis入门学习(二)

    在MyBatis入门学习(一)中我们完成了对MyBatis简要的介绍以及简单的入门小项目测试,主要完成对一个用户信息的查询.这一节我们主要来简要的介绍MyBatis框架的增删改查操作,加深对该框架的了 ...

  9. MySQL入门笔记(二)

    MySQL的数据类型.数据库操作.针对单表的操作以及简单的记录操作可参考:MySQL入门笔记(一) 五.子查询   子查询可简单地理解为查询中的查询,即子查询外部必然还有一层查询,并且这里的查询并非仅 ...

随机推荐

  1. ASP.NET MVC Filter

    http://stackoverflow.com/questions/6940371/asp-net-mvc-request-filters http://afana.me/post/aspnet-m ...

  2. IIS 相关

    Restart IIS: run "iisreset" command check port usage: netstat -ano How to set up SSL in II ...

  3. C# web api 返回类型设置为json的两种方法

    每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默.我眼中的程序员大多都不 ...

  4. spring 依赖注入 小结

    通过 @Autoiwired注解  和接口  注入实现这个接口的实现类 的  类  也必须是 可注入的(必须归spring容器所管理)

  5. Java基础之线程——使用执行器(UsingExecutors)

    控制台程序. 在这个版本的银行示例中,把借款和贷款事务创建为在不同线程中执行的任务,它们把事务提交给职员.创建事务的任务是Callable<>任务,因为它们需要返回已为每个账户创建的借款或 ...

  6. .NET业务实体类验证组件Fluent Validation

    认识Fluent Vaidation. 看到NopCommerce项目中用到这个组建是如此的简单,将数据验证从业务实体类中分离出来,真是一个天才的想法,后来才知道这个东西是一个开源的轻量级验证组建. ...

  7. 工龄居然这么有用![Reprint]

    工龄有多重要?你恐怕未必知道,别以为没啥大不了,事实上,工龄会从各方面影响你的生活 .为了自己的权益,关于工龄的这些事儿,你必须要了解! 1.影响带薪年休假 (1)职工本单位累计工作满1年不满10年的 ...

  8. 20145207《Java程序设计》第9周学习总结

    教材学习内容总结 第十六章 整合数据库 JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作,开发人员无须接触底层数据库驱动程序的差异性.厂商在操作JDBC驱 ...

  9. codevs 1202 求和

    http://codevs.cn/problem/1202/ 1202 求和  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 青铜 Bronze 题解       题目描述 D ...

  10. jquery 数组求差集,并集

    var alpha = [1, 2, 3, 4, 5, 6], beta = [4, 5, 6, 7, 8, 9]; $.arrayIntersect = function(a, b){ return ...