1.应用场景

有时,要使用mysql的正则去匹配数据, 比如从物料名称中识别出,手机的品牌, 型号, 操作系统等信息

以及使用正则去匹配检索数据,不过性能上限有待确定.

2.学习/操作

1. 文档

MySQL 正则表达式 | 菜鸟教程

https://wwwblogs/timxgb/p/5882742.html   //MySQL中REGEXP正则表达式使用大全

https://www.jb51/article/119121.htm  //MySql中使用正则表达式查询的方法

mysql中如何使用正则表达式查询

mysql 正则表达式查询含有非数字和字符的记录

MySql官方手册学习笔记2 MySql的模糊查询和正则表达式

mysql正则表达式 LIKE 通配符

在MySQL中用正则表达式替换数据库中的内容的方法

MySQL中使用replace、regexp进行正则表达式替换的用法分析

MySql中正则表达式的使用方法描述

MySQL 字符串模式匹配 扩展正则表达式模式匹配

MYSQL使用正则表达式过滤数据

MySQL正则表达式入门教程

MySQL使用正则表达式进行查询操作经典实例总结

2. 整理输出

1. 使用LIKE和NOT LIKE比较操作符(注意不能使用=或!=);
2. 模式默认是忽略大小写的;

MySQL中的正则表达式匹配不区分大小写。
为区分大小写,可使用BINARY关键字。
如:WHERE prod_name REGEXP BINARY 'JetPack .000'

3. 允许使用”_”匹配任何单个字符,”%”匹配任意数目字符(包括零字符);  // like通配符, 也可以用于正则匹配

MySQL provides two wildcard characters for constructing patterns: percentage % and underscore _ .

Like语句与正则不是一回事儿,Like仅仅提供了两个通配符~

SELECT username, nickname FROM user WHERE nickname LIKE '\_%-%' limit 100;

 

​​​​4. 进行OR匹配

为搜索两个串之一(或者这个串,或者为另一个串),使用 | 。
| 作为OR操作符,表示匹配其中之一。可给出两个以上的OR条件。

5. 匹配特殊字符

\\  为前导。即转义.正则表达式内具有特殊意义的所有字符都必须以这种方式转义。
\\-  表示查找 -
\\.  表示查找 .

6. \\  也用来引用元字符(具有特殊意义的字符)

\\f    换页
\\n    换行
\\r    回车
\\t    制表
\\v    纵向制表

7. 定位符

^         文本的开始
$        文本的末尾
[[:<:]]  词的开始
[[:>:]]  词的结尾

8. ^的双重用途:在集合中(用[ ]定义),用它来否定该集合。否则,用来指串的开始和。


9. LIKE 匹配整个串,而REGEXP匹配子串。

    简单的正则表达式测试  可以在不使用数据库的情况下,用SELECT来测试正则表达式。
    REGEXP检查总是返回0(没有匹配)或1(匹配),可以用带文字串的REGEXP来测
    试表达式,并试验它们。
//这个真的之前不知道,还以为只能将数据保存到数据库中,然后使用其,进行正则匹配测试

相应的语法如下:
        SELECT 'hello' REGEXP '[0-9]'
    这个例子返回0(因为文本hello中没有数字)。

10. 关于性能

以前我要查找数据都是使用like后来发现mysql中也有正则表达式了并且感觉性能要好于like.  //TBD

[个人目前认为:在数据库量不大的情况下,其实两者效率相差并不大,但是如果数据量比较大时,应该是like查询效率要好一些,但是正则功能更加强大是毋庸置疑的,还是需要实际测试,并且查阅官网文档确定]

11. 正则中需要转义的特殊字符小结

如果要查找文件名中有*的文件,则需要对*进行转义,即在其前加一个\。ls \*.txt。正则表达式有以下特殊字符。需要转义

特别字符

说明

$

匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n' 或 ‘\r'。要匹配 $ 字符本身,请使用 \$。

( )

标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。

*

匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。

+

匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。

.

匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \。

[ ]

标记一个中括号表达式的开始。要匹配 [,请使用 \[。

?

匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。

\

将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n' 匹配字符 ‘n'。'\n' 匹配换行符。序列 ‘\\' 匹配 “\”,而 ‘\(' 则匹配 “(”。

^

匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。

{ }

标记限定符表达式的开始。要匹配 {,请使用 \{。

|

指明两项之间的一个选择。要匹配 |,请使用 \|。

所以是

* . ? + $ ^ [ ] ( ) { } | \ /


构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与操作符将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。

12. [.characters.] 使用

[.characters.]  在括号表达式中(使用[和]),匹配用于校对元素的字符序列,字符为单个字符或新行等字符名

mysql> SELECT ‘~’ REGEXP ‘[[.~.]]’;                                                     -> 1
mysql> SELECT ‘~’ REGEXP ‘[[.tilde.]]’;                                                -> 1

[=character_class=]
在括号表达式中(使用[和]),[=character_class=]表示等同类。它与具有相同校对值的所有字符匹配,包括它本身,
[[=a=]]              等同于[a(+)],[a+],[a{1,}]

 
[:character_class:]
在括号表达式中(使用[和]),[:character_class:]表示与术语类的所有字符匹配的字符类。

标准的类名称是:
alnum       文字数字字符
alpha        文字字符
blank         空白字符
cntrl          控制字符
digit          数字字符
graph        图形字符
lower        小写文字字符
print          图形或空格字符
punct        标点字符
space        空格、制表符、新行、和回车
upper        大写文字字符
xdigit        十六进制数字字符

[[:<:]], [[:>:]]
这些标记表示word边界。它们分别与word的开始和结束匹配。word是一系列字字符,其前面和后面均没有字字符。字符是alnum类中的字母数字字符或下划线(_)。
mysql> select ‘fang shan zi’ regexp ‘[[:<:]]shan[[:>:]]’;            -> 1
mysql> select ‘fang shan zi’ regexp ‘[[:<:]]fang[[:>:]]’;             -> 1
mysql> select ‘fang shans zi’ regexp ‘[[:<:]]shan[[:>:]]’;           -> 0

注意

上面的字符使用是[[:xxx:]]作为一个整体使用的, 如下:

SELECT '手机 中国移动 中国移动品牌  W1 4GB+64GB移动定制全网通 全面屏手机 双卡双待/颜色随机 Pcs
' REGEXP  '中国移动品牌([[:print:]])*W1|中国移动[[:print:]*]W1';

3.问题/补充

TBD

4.参考

MySQL 正则表达式 | 菜鸟教程   //MySQL 正则表达式

https://wwwblogs/timxgb/p/5882742.html   //MySQL中REGEXP正则表达式使用大全

https://www.jb51/article/119121.htm  //MySql中使用正则表达式查询的方法

mysql中如何使用正则表达式查询

mysql 正则表达式查询含有非数字和字符的记录

MySql官方手册学习笔记2 MySql的模糊查询和正则表达式

mysql正则表达式 LIKE 通配符

在MySQL中用正则表达式替换数据库中的内容的方法

MySQL中使用replace、regexp进行正则表达式替换的用法分析

MySql中正则表达式的使用方法描述

MySQL 字符串模式匹配 扩展正则表达式模式匹配

MYSQL使用正则表达式过滤数据

MySQL正则表达式入门教程

MySQL使用正则表达式进行查询操作经典实例总结

后续补充

...

更多推荐

MySQL - 正则学习