通配符过滤正则表达式
Posted love-jelly-pig
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通配符过滤正则表达式相关的知识,希望对你有一定的参考价值。
LIKE谓词:
为在搜索子句中使用通配符,必须使用 LIKE 操作符。 LIKE 指示mysql,后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较。
1. %:任何字符出现任意次数。
select column_name1 from table_name where column_name2 like ‘jet%‘;
检索以jet开头的数据,默认不区分大小写。
2. _: 下划线匹配单个字符
只匹配一个字符,不能多也不能少,不能像%通配符一样匹配0个或多个。
3.通配符使用规则
- 不要过度使用通配符。 如果其他操作符能达到相同的目的,应该使用其他操作符。
- 不要用在开头。 在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的。
- 仔细注意通配符的位置。
4.正则表达式REGEXP
select column_name from table_name where column_name REGEXP ‘1000‘;
检索column_name字段中含有字符1000的数据。比如:jef1000sad;
如果使用LIKE,那么它将不会匹配jef1000sad中的1000,因为LIKE是全词匹配。
(1) .(点号)表示匹配任意一个字符
select column_name from table_name where column_name REGEXP ‘.000‘;
检索含有‘000‘前面有一个字符的数据。比如:
ssfdd1000
dsafd2000
这两个都可以。
(2) OR匹配
select column_name from table_name where column_name REGEXP ‘100|101‘;
把要匹配的内容用单引号括起来,此语句匹配字段中含有100或者101的值。是含有,而不是全词匹配。
(3) 匹配几个字符之一。
使用中括号:
select column_name from table_name where column_name REGEXP ‘[35] tom‘;
此语句匹配含有‘3 tom’或者‘5 tom’的字段值。注意不是全词匹配,含有就行。
此外还可以进行范围匹配:
- [0-9],[1-3] 等等进行数字范围匹配。
- [a-z]来匹配任意字符。
(4)匹配特殊字符。
如果我们要查找字段值中含有‘.’的值,假如我们使用:
... REGEXP ‘.‘;
那么我们将匹配中所有字段,因为在正则表达式中点号表示匹配任意一个字符。所以我们需要转义:
select column_name from table_name where column_name REGEXP ‘\.‘;
特殊字符匹配:
(5) 匹配字符类
举个例子,匹配含有空格的字段值,不仅可以使用:
... REGEXP ‘ ‘;
还可以根据上表中的[:blank:]:
select name from tb2 where name regexp ‘[[:blank:]]‘;
记住外面还需要套上个中括号才行。
(6) 匹配多个实例
举两个例子:
字符‘s‘后面跟的问号表示匹配0个或1个,所以可以匹配到含有‘stick‘或者‘sticks‘.
下一个例子:
第一个正则表达式匹配任意出现的数字,而{4}又规定了出现4次,所以这个语句检索连续出现4个数字的字段值。
(7) 定位符
我们上面用的正则表达式都是在字段值中的任意位置进行匹配,但假如我们要检索开头的某些字符的字段值呢?
开头:^
select name from tb2 where name regexp ‘^[1-5]‘;
检索开头是以1或2或3或4或5的字段值。
结尾:$
select name from tb2 where name regexp ‘[mo]$‘;
检索以字符m或者o结尾的字段值。
^ 符号还有一个用途:
在中括号中间表示检索不在这个集合中间的值:
select name from tb2 where name regexp ‘[^1-3 tom]‘;
此语句是检索除了‘1 tom‘,‘2 tom‘,‘3 tom‘以外的字段值。可以看做全词否定。
以上是关于通配符过滤正则表达式的主要内容,如果未能解决你的问题,请参考以下文章