用正则表达式进行搜索

正则表达式介绍

正则表达式是用来匹配文本的特殊的串
正则表达式用正则表达式语言建立
正则表达式具有你必须学习的特殊的语法和指令

使用MySQL正则表达式

正则表达式的作用是匹配文本,将一个模式[正则表达式]与一个文本串进行比较
MySQL用WHERE子句对正则表达式提供了初步的支持
MySQL仅支持多数正则表达式实现的一个很小的子集

基本字符匹配

REGEXP
.:匹配任意一个字符
默认下正则表达式匹配不区分大小写,若要区分用 REGEXP BINARY

进行OR匹配

|

匹配几个字符之一

[xx1,xx2,...,xxn]
[^xx1,xx2,...,xxn]// 否定版本

匹配范围

[num1-num2]
[alp1-alp2]

匹配特殊字符

为了匹配特殊字符,必须用\\为前导
\\-表示查找-
\\.表示查找.
正则表达式内具有特殊意义的所有字符都必须以这种方式转义

其他
\\f	换页
\\n	换行
\\r	回车
\\t	制表
\\v 纵向制表
\\\	反斜杠

匹配字符类

[:alnum:]		任意字母和数字
[:alpha:]		任意字符
[:blank:]		空格和制表
[:cntrl:]		ASCII控制字符
[:digit:]		任意数字
[:graph:]		
[:lower:]		任意小写字母
[:space:]		任意空白字符
[:upper:]		任意大写字母

匹配多个实例

目前为止使用的所有正则表达式都试图匹配单次出现
如存在一个匹配
该行被检索出来
如不存在
检索不出任何行

有时需对匹配的数目进行更强的控制
重复元字符
*							0个或多个匹配
+							1个或多个匹配
?							0个或1个匹配
{n}						指定数目的匹配
{n,}						不少于指定数目的匹配
{n,m}					匹配数目的范围

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

+---------------------+
| prod_name		|
| INT (1 stick)		|
| INT (5 sticks)	|
+---------------------+

'[[:digit:]]{4}'// 匹配连在一起的4位数字

定位符

目前为止的所有例子都是匹配一个串中任意位置的文本
为匹配特定位置的文本,需用下表的定位符
定位元字符
元字符			说明
^						文本的开始
$						文本的结尾
[[:<:]]				词的开始
[[:>;]]				词的结尾

'^[0-9\\.]'// 找出以数字或小数点开始的字符串

LIKE需要整个串匹配才可以
REGEXP需要串的某个子串匹配模式即可

简单的正则表达式测试
SELECT value REGEXP 'xxx'

猜你喜欢

转载自blog.csdn.net/x13262608581/article/details/108953434