MySQL正则表达式
- 检索列prod_name包含文本1000的所有行:
select prod_name from products where prod_name regexp '1000' order by prod_name;
- 用点(.)表示匹配任意一个字符:
select prod_name from products where prod_name regexp '.000' order by prod_name;
- 进行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;
(事实上,正则表达式[123]Ton 为[1|2|3]Ton的缩写) - 字符集合也可以被否定:[ˆ123]
- 匹配范围:
select prod_name from products where prod_name regexp '[1-5] Ton' order by prod_name;
- 匹配特殊字符,必须用 \\ 为前导,\\-表示查找-,\\.表示查找.。
空白元字符:
元字符 | 说明 |
---|---|
\\f | 换页 |
\\n | 换行 |
\\r | 回车 |
\\t | 制表 |
\\v | 纵向制表 |
匹配字符类:
类 | 说明 |
---|---|
[:alnum:] | 任意字母和数字 |
[:alpha:] | 任意字母 |
[:blank:] | 空格和制表 |
[:cntrl:] | ASCII控制字符 |
[:digit:] | 任意数字 |
[:graph:] | 与[: print: ] 相同,但不包括空格 |
[:lower:] | 任意小写字母 |
[:print:] | 任意可打印字符 |
[:punct:] | 既不在[: alnum: ] 又不在 [: alnum: ] 中的任意字符 |
[:space:] | 包括空格在内的任意空白字符 |
[:upper:] | 任意大写字母 |
[:xdigit:] | 任意十六进制数字 |
重复元字符:
元字符 | 说明 |
---|---|
* | 0个或多个匹配 |
+ | 1个或多个匹配(等于{1,} |
? | 0个或1个匹配(等于{0,1} |
{n} | 指定数目的匹配 |
{n,} | 不少于指定数目的匹配 |
{n,m} | 匹配数目的范围(m不超过255 |
- 举例说明:
select prod_name from products where prod_name regexp '\\([0-9] sticks?\\)' order by prod_name;
- 匹配连在一起的4位数字:
select prod_name from products where prod_name regexp '[[:digit:]]{4}' order by prod_name;
定位元字符:
元字符 | 说明 |
---|---|
^ | 文本的开始 |
$ | 文本的结尾 |
[[:<:]] | 词的开始 |
[[:>:]] | 词的结尾 |
- 找出以一个数(包括以小数点开始的数)开始的所有产品:
select prod_name from products where prod_name regexp '^[0-9\\.]' order by prod_name;