第九章:用正则表达式进行搜索

@author: Tobin
@date: 2019/10/28 19:51:40

MySQL仅支持多数正则表达式实现的一个很小的子集。

# 检索列prod_name包含文本1000的所有行
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000'
ORDER BY prod_name;
# 这里注意和LIKE的差别。LIKE匹配'1000'是全匹配。必须等于1000才返回值。而REGEXP是只要包含1000就可以。

# 匹配任意一个字符
SELECT prod_name
FROM products
WHERE prod_name REGEXP '.000'
ORDER BY prod_name;

# MySQL中的正则表达式匹配,自版本3.32.4后不区分大小写。大写和小写都匹配。为区分大小写,可以使用BINARY关键字。
# 如 WHERE prod_name REGEXP BINARY 'JetPack .000'

# 进行OR匹配,使用'|'
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000|2000'
ORDER BY prod_name;

# 匹配几个字符之一
# 相当于另一种形式的|,'[1|2|3] Ton'加括号,否则匹配1,2,3 Ton中的一个
# [^123]表示不匹配其中的任意一个字符
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;

# 转义\\
# \\f 换页 \\n 换行 \\r 回车 \\t 制表 \\v 纵向制表 \\\匹配反斜杠本身
SELECT prod_name
FROM products
WHERE prod_name REGEXP '\\.'
ORDER BY prod_name;

# 匹配字符类
# 举例。比如[:alnum:] 任意字符和数字,[:alpha:]任意字符

# 匹配多个实例
# * 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;
# ^在括号内是否定该集合,在外面就是定位符
# 用^开头,$结尾可以使得REGEXP等价于LIKE

猜你喜欢

转载自www.cnblogs.com/zuotongbin/p/11814144.html