使用MySQL正则表达式
仅为正则表达式语言的一个子集。
基本字符匹配
例:检索列prod_name包含文本.000的所有行:
SELECT prod_name
FROM products
WHERE prod_name REGEXP '.000'
ORDER BY prod_name;
!:正则匹配不区分大小写,如果需要,使用BINARY关键字,如WHERE prod_name REGEXP BINARY 'JetPack .000'。
进行OR匹配
为搜索两个字符串之一,使用|:
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000|2000'
ORDER BY prod_name;
匹配几个字符之一
只匹配特定的单一字符,用[]:
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[123] Ton'
ORDER BY prod_name;
匹配范围
-
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[1-5] Ton'
ORDER BY prod_name;
匹配特殊字符
用\\为前导。\\-表示查找-,\\.表示查找.。
SELECT vend_name
FROM products
WHERE vend_name REGEXP '\\.'
ORDER BY vend_name;
\\也用来引用元字符:
| 元字符 | 说明 |
|---|---|
\\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]) |
为了更方便的工作,可以使用预定义的字符集,称为字符类(characterclass)。
| 类 | 说明 |
|---|---|
| [: 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]) |
匹配多个实例
使用重复元字符,见正则表达式。
SELECT prod_name
FROM products
WHERE prod_name REGEXP '\\([0-9] sticks?\\)'
ORDER BY prod_name;
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[[: digit:]]{4}'
ORDER BY prod_name;
定位符
| 元字符 | 说明 |
|---|---|
| ^ | 文本的开始 |
| $ | 文本的结尾 |
| [[: | 词的开始 |
| [[: >:]] | 词的结尾 |
定位元字符:
| 元字符 | 说明 |
|---|---|
| ^ | 文本的开始 |
| $ | 文本的结尾 |
| [[: | 词的开始 |
| [[: >:]] | 词的结尾 |