使用mysql正则表达式

1、基本字符匹配

1)检索列prod_name包含文本1000的所有行:

select prod_name from products where prod_name REGEXP '1000' order by prod_name;

2).是正则表达式语言中一个特殊的字符,它表示匹配任意一个字符:

select prod_name from products where prod_name REGEXP '.000' order by prod_name;

3)LIKE和REGEXP之间重要差别:

select prod_name from products where prod_name LIKE '1000' order by prod_name;

select prod_name from products where prod_name REGEXP '1000' order by prod_name;

LIKE匹配整个列,如果被匹配的文本在列值中出现,LIKE将不会找到它,相应的行也不被返回(除非使用通配符)。而REGEXP在列值内进行匹配,如果被匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回。

2、进行OR匹配

select prod_name from products where prod_name REGEXP '1000|2000' order by prod_name;

使用正则表达式1000|2000。|为正则表达式OR的操作符,它表示匹配其中之一。

3、匹配几个字符之一

select prod_name from products where prod_name REGEXP '[123] Ton' order by prod_name;

[123]定义一组字符,它的意思是匹配1或2或3。[]是另一种形式的OR语句,事实上,正则表达式[123]Ton为[1|2|3]Ton的缩写。

4、匹配范围

select prod_name from products where prod_name REGEXP '[1-5] Ton' order by prod_name;

[1-5]定义一个范围,这个表达式意思是匹配1到5。

5、匹配特殊字符

为了匹配特殊字符,必须用\\为前导。\\-表示查找-,\\.表示查找.。

select vend_name from vend_name REGEXP '\\.' order by vend_name;

\\.匹配.,这种处理就是所谓的转义(escaping),正则表达式内具有特殊意义的所有字符都必须以这种方式转义。

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])

7、匹配多个实例

1)正则表达式重复元字符

*               0个或多个匹配

+               1个或多个匹配(等于{1,})

?              0个或1个匹配(等于{0,1})

{n}             指定数目的匹配

{n,}            不少于指定数目的匹配

{n,m}           匹配数目的范围(m不超过255)

2)select prod_name from products REGEXP '\\([0-9] sticks?\\])' order by prod_name;

\\(匹配),[0-9]匹配任意数字,sticks?匹配sticks和sticks(s后的?使s可选,因为?匹配它前面的任何字符的0次或1次出现),\\)匹配)。没有?,匹配stick和sticks会非常困难。

3)select prod_name from products where prod_name REGEP '[[:digit:]]{4}' order by prod_name;

[:digit:]匹配任意数字,因而它为数字的一个集合。{4}确切地要求它前面的字符(任意数字)出现4次,所以[[:digit:]]{4}匹配连在一起的任意4位数字。

8、定位符

1)定位元字符:

^              文本的开始

$              文本的结尾

[[:<:]]        词的开始

[[:>:]]        词的结尾

2)select prod_name from products where prod_name REGEXP '^[0-9\\.]' order by prod_name;

^匹配串的开始。因此,^[0-9\\.]只在.或任意数字为串中第一个字符时才匹配它们。没有^,则还要多检索出4个别的行(那些中间有数字的行)。

你可能感兴趣的:(使用mysql正则表达式)