我爱编程

【MySQL必知必会】第9章:正则表达式搜索

2018-04-09  本文已影响26人  100gle

9.1 正则表达式介绍

正则表达式是用来匹配文本的特殊的串(字符集合),并且在所有操作系统、文本编辑器等都支持正则表达式

9.2 使用正则表达式

MySQL用WHERE子句来支持正则表达式检索,并且通过REGEXP(regular expression)来连接检索条件:

#基础用法
SELECT prod_name 
FROM products
WHERE prod_name REGEXP '1000'
ORDER BY prod_name;

#正则通配符
SELECT prod_name 
FROM products
WHERE prod_name REGEXP '.000'
ORDER BY prod_name;

LIKE和REGEXP之间一个重要差别:

LIKE匹配整个列

REGEXP在列值内进行匹配

虽然REGEXP不能匹配整个列值,但是如果借助定位符(^和$)可以起到和LIKE相同的作用

9.3 OR的正则表达式运用

「|」符号的用法

在正则表达式中可以使用「|」符号来表示「或」(OR),即可起到类似于select中OR关键字的用法:

SELECT prod_name
FROm products
WHERE prod_name REGEXP '1000|2000'
ORDER BY prod_name;

[]符号的用法

[]内可以用来定义一组字符,它表示是返回当中任何一种情况的字符:

SELECT prod_name
FROM products
WHERE prod_name REGEXP '[123]Ton'
#等价于 REGEXP '[1|2|3] Ton'
#等价于 REGEXP '[1-3] Ton'
ORDER BY prod_name;

9.4 特殊字符匹配

除了匹配一般的字母、数字之外,有时可能还需要匹配某些带有特殊符号的文本,例如「.」等;但是这些字符在正则表达式中可能会有着其他用法,因此对待这些字符时需要格外小心:

SELECT vend_name
FROm vendors
WHERE vend_name REGEXP '\\.'
ORDER BY vend_name;

9.5 匹配多个实例

重复元字符

有时需要对匹配的数目进行更强的控制。例如,需要寻找所有的数,不管数中包含多少数字;或者你可能想寻找一个单词并且还能够适应一个尾 随的s(如果存在),等等;这是就需要用到重复元字符来进行操作:

SELECT prod_name
FROM products
WHERE prod_name REGEXP '\\([0-9] sticks?\\)'

9.6 定位符

如果想匹配特定位置的文本,就需要用到定位符来进行定位:

SELECT prod_name
FROM products
WHERE prod_name REGEXP '^[0-9\\.]'
ORDER BY prod_name;

「^」有两种用法:一种是来指定字符串的开始,另一种就是在集合中用[和]定义,用来否定该集合,即匹配除了该集合外的条件,^[abc]

上一篇 下一篇

猜你喜欢

热点阅读