MySQL正则表达式
正则表达式是用来匹配文本的特殊的串(字符集和)。比如从文本文件中提取电话号码。
基本字符匹配
SELECT name
FROM Customer
WHERE name REGEXP ‘li‘
LIKE与REGEXP之间的重要差别
SELECT Age
FROM Customer
WHERE Age REGEXP ‘16‘
SELECT Age
FROM Customer
WHERE Age LIKE‘1‘
如果执行这两个语句,LIKE不返回数据,REGEXP返回一行
LIKE匹配整个列,如果被匹配的文本仅在列值中出现,like将不会找到它,
而REGEXP在列值内进行匹配,如果被匹配的文本在列值中出现,REGEXP将会找到它
进行OR匹配
SELECT Age
FROM Customer
WHERE Age REGEXP ‘16|17‘
匹配几个字符之一
SELECT Name
FROM Customer
WHERE Name REGEXP ‘[123] Ton‘
[123]定义一组字符,它的意思是匹配1或2或3,因此,1 ton和2 ton都匹配且返回,
正如所见,[]是另一种形式的OR语句,[123]匹配字符1,2或3,但[^123]却匹配除去这些字符外的任何东西
匹配范围
集合可用来定义要匹配的一个或多个字符
[0123456789] 简化写法[0-9], 范围不限于完整的集合[3-8]或[2-9]也是合法的范围,此外范围不一定只是数值的,[a-z]匹配任意字母字符。
例如:
SELECT Name
FROM Customer
WHERE Name REGEXP ‘[1-3] Ton‘
匹配特殊字符
如何匹配有特殊含义的字符,如[]、 | 、.
为了匹配特殊字符必须用转义字符\\为前导,\\-表示查找-,\\.表示查找.
例如:
SELECT Name
FROM Customer
WHERE Name REGEXP ‘\\.‘
\\也用来引用元字符(具有特殊含义的字符)
\\f 换页
\\n换行
\\r回车
\\t制表
\\v纵向制表
匹配字符类
类 | 说明 |
[: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]) |
匹配多个字符
前面使用的正则表达式都试图匹配单次出现,但有时需要对匹配的数目有更强的控制。
元字符 | 说明 |
* | 0个或多个匹配 |
+ | 1个或多个匹配(等于{1,}) |
? | 0个或1个匹配(等于{0,1}) |
{n} | 指定数目的匹配 |
{n,} | 不少于指定数目的匹配 |
{n,m} | 匹配数目的范围(m不超过255) |
例如:
SELECT Name
FROM Customer
WHERE Name REGEXP ‘\\([0-9]\\ sticks?\\)‘
定位符
元字符 | 说明 |
^ | 文本的开始 |
$ | 文本的结束 |
[[:<:]] | 词的开始 |
[[:>:]] | 词的结尾 |
例如:
SELECT Name
FROM Customer
WHERE Name REGEXP ‘^[0-9\\.]‘
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。