正则表达式:
1、背景:
正则表达式是用来匹配文本的特殊的串(字符集合)。如果你想从一个文本文件中提取电话号码,可以使用正则表达式;如果你需要查找名字中间有数字的所有文件,可以使用一个正则表达式;如果你想在一个文本块中找到所有重复的单词,可以使用一个正则表达式。
2、作用:
匹配文本,将一个模式(正则表达式)与一个文本串进行比较。mysql用where子句对正则表达式提供了初步的支持,允许你指定正则表达式过滤select检索出的数据。
3、例子:
3.1
select prod_name
from products
where prod_name regexp'1000|2000'
order by prod_name;
select * from XXX where dt='20201118' and scztmc REGEXP '浙江大华机器人技术有限公司|杭州泛普生物科技有限公司';
3.2
为了匹配特殊字符,必须使用\\为前导。
\\- 表示查找-, \\. 表示查找. 。
select vend_name
from vendors
where vend_name regexp '\\.'
order by vend_name;
3.3
select prod_name
from products
where prod_name regexp '[[:digit:]]{4}'
order by prod_name;
如前所述,[:digit:]匹配任意数字,因而为数字的一个集合。
{4}确切地要求它前面的字符(任意数字)出现4次,所以[[:digit:]]{4}匹配连在一起的任意4位数字。
3.4
定位符:
上面的所有例子都是匹配一个串中任意位置的文本。为了匹配特殊位置的文本,可使用如下定位符。
^ 文本的开始
$ 文本的结尾
select prod_name
from products
where prod_name regexp '^[0-9\\.]'
order by prod_name;
这个是找出一个数(包括以小数点开始的数)开始的所有产品。
3、简单的正则表达式测试:
可以在不使用数据库表的情况下用select来测试正则表达式。
regexp检查总是返回0(没有匹配)或1(匹配)
例如:select 'hello' regexp '[0-9]';
这个例子显然将返回0(因为文本hello中没有数字)。