使用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;
定位符
元字符 | 说明 |
---|---|
^ | 文本的开始 |
$ | 文本的结尾 |
[[: | 词的开始 |
[[: >:]] | 词的结尾 |
定位元字符:
元字符 | 说明 |
---|---|
^ | 文本的开始 |
$ | 文本的结尾 |
[[: | 词的开始 |
[[: >:]] | 词的结尾 |
网友评论