襄阳网站建设xytzg,南通网站建设top,wordpress主页与文章页,建设营销型网站公司前提#xff1a;使用《MySql006——检索数据#xff1a;基础select语句》中创建的products表 一、正则表达式介绍
关于正则表达式的介绍大家可以看我的这一篇博客《Java038——正则表达式》#xff0c;这里就不再累赘。
二、使用MySQL正则表达式
2.1、基本字符匹配
检索… 前提使用《MySql006——检索数据基础select语句》中创建的products表 一、正则表达式介绍
关于正则表达式的介绍大家可以看我的这一篇博客《Java038——正则表达式》这里就不再累赘。
二、使用MySQL正则表达式
2.1、基本字符匹配
检索列prod_name包含文本1000的所有行
SELECT prod_name
FROMstudy.products
WHEREprod_name REGEXP 1000
ORDER BY prod_name;除关键字LIKE被REGEXP替代外这条语句看上去非常像使用LIKE的语句MySql010——检索数据过滤数据使用LIKE操作符结合%、_通配符。它告诉MySQLREGEXP后所跟的东西作为正则表达式与文字正文1000匹配的一个正则表达式处理。
检索列prod_name以000结尾的所有行
SELECT prod_name
FROMstudy.products
WHEREprod_name REGEXP .000
ORDER BY prod_name;匹配不区分大小写 MySQL中的正则表达式匹配自版本3.23.4后不区分大小写即大写和小写都匹配。为区分大小写可使用BINARY关键字如WHERE prod_name REGEXP BINARY ‘JetPack .000’。 2.2、进行OR匹配
为搜索两个串之一或者为这个串或者为另一个串使用|如下所示
SELECT prod_name
FROMstudy.products
WHEREprod_name REGEXP 1000|2000
ORDER BY prod_name;上面语句中使用了正则表达式1000|2000。|为正则表达式的OR操作符。它表示匹配其中之一因此1000和2000都匹配并返回。
2.3、匹配几个字符之一
如果你只想匹配特定的字符可通过指定一组用[和]括起来的字符来完成
SELECT prod_name
FROMstudy.products
WHEREprod_name REGEXP [123] Ton
ORDER BY prod_name;1、这里使用了正则表达式[123] Ton。[123]定义一组字符它的意思是匹配1或2或3因此1 ton和2 ton都匹配且返回没有3 ton 2、正如所见[]是另一种形式的OR语句。事实上正则表达式[123]Ton为[1|2|3]Ton的缩写也可以使用后者。但是需要用[]来定义OR语句查找什么。
2.4、匹配范围
SELECT prod_name
FROMstudy.products
WHEREprod_name REGEXP [1-5] Ton
ORDER BY prod_name;这里使用正则表达式[1-5] Ton。[1-5]定义了一个范围这个表达式意思是匹配1到5因此返回3个匹配行。
2.5、匹配特殊字符
为了匹配特殊字符必须用\为前导。\-表示查找-\.表示查找.其实就是Java中的特殊字符的转义。
SELECT prod_name
FROMstudy.products
WHEREprod_name REGEXP \\.
ORDER BY prod_name;上面表示检索列prod_name中包含.的行。
2.6、匹配字符类 类 说 明[:alnum:] 任意字母和数字同[a-zA-Z0-9]
[:alpha:] 任意字符同[a-zA-Z]
[:blank:] 空格和制表同[\\t]
[:cntrl:] ASCII控制字符ASCII 0到31和127
[:digit:] 任意数字同[0-9]
[:graph:] 与[:print:]相同但不包括空格
[:lower:] 任意小写字母同[a-z]
[:print:] 任意可打印字符
[:punct:] 既不在[:alnum:]又不在[:cntrl:]中的任意字符
[:space:] 包括空格在内的任意空白字符同[\\f\\n\\r\\t\\v]
[:upper:] 任意大写字母同[A-Z]
[:xdigit:] 任意十六进制数字同[a-fA-F0-9]2.7、匹配多个实例
元字符 说明* 0个或多个匹配1个或多个匹配等于{1,}
? 0个或1个匹配等于{0,1}
{n} 指定数目的匹配
{n,} 不少于指定数目的匹配
{n,m} 匹配数目的范围m不超过255实例1、
SELECT prod_name
FROMstudy.products
WHEREprod_name REGEXP \\([0-9] sticks?\\)
ORDER BY prod_name;正则表达式\([0-9] sticks?\)需要解说一下。\(匹配)[0-9]匹配任意数字这个例子中为1和5sticks?匹配stick和stickss后的?使s可选因为?匹配它前面的任何字符的0次或1次出现\)匹配)。没有?匹配stick和sticks会非常困难。
实例2、 匹配连在一起的4位数字
SELECT prod_name
FROMstudy.products
WHEREprod_name REGEXP [[:digit:]]{4}
ORDER BY prod_name;如前所述[:digit:]匹配任意数字因而它为数字的一个集合。{4}确切地要求它前面的字符任意数字出现4次所以 [[:digit:]]{4}匹配连在一起的任意4位数字。需要注意的是在使用正则表达式时编写某个特殊的表达式几乎总是有不止一种方法。上面的例子也可以如下编写
SELECT prod_name
FROMstudy.products
WHEREprod_name REGEXP [0-9][0-9][0-9][0-9]
ORDER BY prod_name;2.8、定位符
目前为止的所有例子都是匹配一个串中任意位置的文本。为了匹配特定位置的文本需要使用如下列出的定位符。
元字符 说 明^ 文本的开始
$ 文本的结尾
[[::]] 词的开始
[[::]] 词的结尾例如如果你想找出以一个数包括以小数点开始的数开始的所有产品怎么办简单搜索[0-9\.]或[[:digit:]\.]不行因为它将在文本内任意位置查找匹配。解决办法是使用^定位符如下所示
SELECT prod_name
FROMstudy.products
WHEREprod_name REGEXP ^[0-9\\.]
ORDER BY prod_name;^匹配串的开始。因此^[0-9\\.]只在.或任意数字为串中第一个字符时才匹配它们。没有^则还要多检索出4个别的行那些中间有数字的行。
与君共享
最后有兴趣的小伙伴可以点击下面链接这里有我整理的MySQL学习博客内容谢谢~
《MySQL数据库学习》