正则表达式介绍

正则表达式是用来匹配文本的特殊字符集合,如果你想从一个文本中提取电话号码而已使用正则表达式,如果你需要查找名字中包含数字的所有文件可以使用正则,如果你你要在文本块中找到所有重复的单词,可以使用正则。

可以把正则【regexp】,直接理解为【去匹配】

基本字符匹配

我们用来检索列prod_name包含文本luzhaosahn的所有行

select prod_name
from products
where prod_name regexp 'luzhaoshan'
order by prod_name; 查询结果是:
prod_name
jetback luzhaoshan

为什么要费力的使用正则表达式呢?因为在高级查询中用处大大的好

例如:

select prod_name
from products
where prod_name regexp '.000'
order by prod_name; 输出结果为:
prod_name jetbaas 2000
hsahgj 8000
jaas 2000
ahgj 8000
jaas 2000
ahgj 8000 这里使用了正则表达式.000,是正则表达式语言中一个特殊的字符。它表示匹配任意一个字符,因此,2000和8000都匹配并且返回数据。
----当然这个也是可以使用like和通配符进行来完成的,如下参考:
select prod_name
from products
where prod_name like '%000'
order by prod_name; 对比来看:
select prod_name
from products
where prod_name regexp '.000'
order by prod_name;
----regexp 在列值内进行匹配
----like 匹配的是整个列
下面让你们看一个神奇的地方!!!!!!!!!!!!
select prod_name
from products
where prod_name like '000'
order by prod_name; 对比来看:
select prod_name
from products
where prod_name regexp '.000'
order by prod_name; #### 如果执行上述两条语句,会发现第一条是不返回数据,而第二条语句返回一行,为什么??
因为,LIKE匹配整个列,如果被匹配的文本在列值内部中,并非是单独的列,LIKE 将不会找到它,相应的行也不会返回,【除非使用通配符获取数据】。 而REGEXP正好是在列值内部进行匹配,如果被匹配的文本在裂殖内部中,REGEXP就会找到它,相应的行也会返回。【这是一个非常重要的差别!!!】 REGEXP如果想要实现LIKE的功能,需要和^和$符合结合使用。

进行OR匹配,在正则表达式中使用 | 来表示OR的操作


select prod_name
from products
where prod_name REGEXP '1000|2000'
order by prod_name; 输出结果为:
prod_name jetpack 1000
jetmaoc 2000

语句中使用正则表达式1000|2000。 | 为正则表达式的or操作符。它表示匹配其中之一。因此1000和2000都匹配并且返回。

使用 | 从功能上类似于select语句中使用的or语句,多个or条件可以并入单个正则表达式。

----两个以上的OR条件, 可以给出两个以上的OR条件。例如,

‘1000 | 2000 | 3000’ 将匹配1000或者2000或者3000。

匹配指定字符,通过【】字符来完成

例如:


select prod_name
from products
where prod_name regexp '[123]ton'
order by prod_name; 输出结果是:
prod_name
1 ton
2 ton 这里使用正则表达式[123]ton,[123]定义一组字符,它的意思是匹配1 或者匹配2 或者匹配3,因此 1ton 和 2 ton 都匹配并且返回数据,(没有3ton) 由此可知,[]是另一种形式的OR语句,事实上,正则表达式[123]ton为[1|2|3]ton
的缩写,也可以使用后者。结果都是一样的如下所示:
select prod_name
from products
where prod_name regexp '[1|2|3]ton'
order by prod_name; 输出结果是:
prod_name
1 ton
2 ton

[0-9]匹配任意0-9的字符
[a-z]匹配任意a-z的任意字母
例子如下:
select prod_name
from products
where prod_name regexp '[1-5]ton'
order by prod_name; 输出结果为:
prod_name 1 ton anvil
2 ton anvil
3 ton anvil
.5 ton snkil 这里使用正则表达式[1-5]ton。定义了一个范围,这个表达式意思是匹配到1-5,因此返回3个匹配行。 由于 5 ton 匹配,所以返回 .5ton

如果你想找出一个数或者以小数点开始的数,开始的所有产品,怎么办,简单搜索[0-9\.]不行的,因为它在文本中任意位置查找匹配,解决办法就是使用^定位符。


^ 文本的开始
$ 文本的结束 select prod_name
from products
where prod_name regexp '^[0-9]\\.'
order by prod_name 输出结果为:
prod_name 1 ton anvil
2 ton anvil
3 ton anvil
.5 ton snkil ^ 匹配串的开始。
^的双重用途,
第一个是在集合中用来否定该集合。
第二个是用来指示串的开始处。 简单的正则表达式测试:
可以在不适用数据库表的情况下用select来测试正则表达式,regexp检查总是返回0
0是没有匹配,1是匹配,可以使用带文本串的regexp来测试表达式,并实验他们
相应的测试如下:
select ‘hello’ regexp ‘[0-9]’;
这个例子显然将返回结果0,因为文本hello中没有数字。

用正则表达式【regexp】进行高级搜索数据的更多相关文章

  1. 通过wui登陆 sap 页面对数据进行高级 搜索

    1: 登陆QGL系统. 在 T-CODE搜索框输入wui 会跳到搜索的web页面,进行搜索. 或者浏览器输入: https://ldciqgl.wdf.sap.corp:44300/sap(bD1lb ...

  2. javascript类型系统——正则表达式RegExp类型

    × 目录 [1]对象 [2]实例属性 [3]静态属性[4]实例方法 前面的话 前面已经介绍过javascript中正则表达式的基础语法.javascript的RegExp类表示正则表达式,String ...

  3. JavaScript 正则表达式RegExp 和字符串本身的正则表达式

    JavaScript 正则表达式 正则表达式(英语:Regular Expression,在代码中常简写为regex.regexp或RE)使用单个字符串来描述.匹配一系列符合某个句法规则的字符串搜索模 ...

  4. JavaScript学习笔记-正则表达式(RegExp对象)

    正则表达式(RegExp对象)   1.正则表达式字面量,在脚本加载后编译.若你的正则表达式是常量,使用这种方式可以获得更好的性能,重复使用时不会重新编译: 2.使用构造函数创建的RegExp,提供了 ...

  5. 正则表达式(RegExp)

    正则表达式(RegExp) 如何按一定规则快速查找到需要找寻的内容,js的设计者们给我们提供了一个叫正则表达式(RegExp对象),专门用于处理类似问题. RegExp对象表示正则表达式,它是对字符串 ...

  6. SEO-搜索引擎高级搜索指令

    搜索引擎高级搜索指令 1.双引号 把搜索词放在双引号中,代表完全匹配搜索,也就是说搜索结果返回的页面包含双引号中出现的所有的词,连顺序也必须完全匹配.bd和Google 都支持这个指令.例如搜索: & ...

  7. JavaScript数据类型 正则表达式RegExp类型

    前言 上一篇文章已经介绍了正则表达式的基础语法.javascript的RegExp类表示正则表达式,String和RegExp都定义了方法,使用正则表达式可以进行强大的模式匹配和文本检索与替换.本文将 ...

  8. MySQL正则表达式 REGEXP详解

    在开始这个话题之前我们首先来做一个小实验,比较一下REGEXP和Like他们两个哪个效率高,如果效率太低,我们就没有必要做过多的研究了,实验的代码如下:<?phpRequire("co ...

  9. GOOGLE高级搜索技巧

    前记:  我是完整的看完了.内容有点乱啊,自己没有时间整理,先放在自己的印象笔记里了....   二,GOOGLE特色 GOOGLE支持多达132种语言,包括简体中文和繁体中文: GOOGLE网站只提 ...

随机推荐

  1. SQL Server Management Studio 安装流程

    数据库的操作需要使用SQL Server Management Studio,不过也可以使用其他的: 下面是安装操作的步骤:如果你下载的压缩包,你需要先解压到一个文件夹里,然后双击setup.exe, ...

  2. UML元素绘制方式

    UML是由视图(View).图(Diagrams).模型元素(Model elements)是和通用机制等几个部分构成. 视图:视图是对系统的抽象表示,UML共有9种不同的图类型. 模型元素:代表面向 ...

  3. Java类的定义与类的实例化

    目录 Java类的定义与类的实例化 类的定义 定义一个简单的类 定义一个成员变量 定义一个方法 定义一个构造器 类的实例化 创建对象及使用对象: 创建对象的过程在内存中的表现 Java类的定义与类的实 ...

  4. 为什么 Redis 是单线程的?

    以前一直有个误区,以为:高性能服务器 一定是 多线程来实现的 原因很简单因为误区二导致的:多线程 一定比 单线程 效率高.其实不然. 在说这个事前希望大家都能对 CPU . 内存 . 硬盘的速度都有了 ...

  5. Reactor和Proactor模型

    背景 前面介绍了I/O多路复用模型,那有了I/O复用,有了epoll已经可以使服务器并发几十万连接的同时,还能维持比较高的TPS,难道还不够吗?比如现在在使用epoll的时候一般都是起个任务,不断的去 ...

  6. JNI教程与技术手册

    转载请标明出处:http://blog.csdn.net/shensky711/article/details/52806794 本文出自: [HansChen的博客] 概述 对于JNI,有些童鞋在没 ...

  7. telnet指令研究—以网络聊天程序为例

    一.telnet指令 Telnet取名自Telecommunications和Networks的联合缩写,是早期个人计算机上连接到服务器主机的一个网络指令,由于存在安全问题,现在已经很少被使用.在wi ...

  8. C#使用Consul集群进行服务注册与发现

    前言 我个人觉得,中间件的部署与使用是非常难记忆的:也就是说,如果两次使用中间件的时间间隔比较长,那基本上等于要重新学习使用. 所以,我觉得学习中间件的文章,越详细越好:因为,这对作者而言也是一份珍贵 ...

  9. 基于ASP.NET Core 3.0快速搭建Razor Pages Web应用

    前言 虽然说学习新的开发框架是一项巨大的投资,但是作为一个开发人员,不断学习新的技术并快速上手是我们应该掌握的技能,甚至是一个.NET Framework开发人员,学习.NET Core 新框架可以更 ...

  10. docker镜像、docker容器导入导出命令

    一.docker镜像导入导出命令 导出命令: docker save -o <保存路径> <镜像名称:标签> docker save -o ./test.tar test:la ...