首页 > 应用开发 > Java > MySql系列:正则表达式和数据过滤
鼓励有时比压力要重要!
在学习的过程中,很多时候我们听到的都是,
你要怎样,怎样,你瞧瞧谁谁谁,哪怕今天听不到这样的声音了,但因为曾经反复听到过而导致内心抗拒。虽然也知道自己要去学,但是很难坚持,学着学着就没有了方向,看到还有那么多不会的就更慌了,以至于最后心态崩了,更不愿意学。其实程序员的压力并不小,想成长几乎是需要一直的学习,就像似乎再也不敢说精通java了一样,知识量实在是随着学习的深入,越来越深,越来越广。所以需要,开心学习,快乐成长!
我们都知道到MySQL可以通过 LIKE ...% 来进行模糊匹配。
MySQL 同样也支持其他正则表达式的匹配,
MySQL 中使用
REGEXP 操作符来进行正则表达式匹配。
正则表达式的作用是匹配文本,将一个模式(正则表达式)与一个文本串进行比较。MySQL用
WHERE 子句对正则表达式提供了初步的支持,允许你指定正则表达式,过滤
SELECT 检索出的数据。
下表中的正则模式可应用于
REGEXP 操作符中
| 模式 | 描述 |
|---|---|
| ^ | 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。 |
| $ | 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。 |
| . | 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' |
| [...] | 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。 |
| [^...] | 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。 |
| p1 p2 p3 | 匹配 p1 或 p2 或 p3。例如,'z |
+|匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。 {n}|n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。 {n,m}|m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。
基本字符匹配:
REGEXP关键字来匹配正则
SELECT name FROM tab1 WHERE name REGEXP 'abc'; //REGEXP后所跟的东西作为正则表达式
匹配字符类:
匹配多个字符:
定位符:
匹配特殊字符使用\进行转义:
示例:
查询找到所有的名字以'st'开头
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';
查询找到所有的名字以'ok'结尾
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';
查询找到所有的名字包函'mar'的字符串
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';
查询找到所有名称以元音开始和'ok'结束 的 mysql> SELECT name FROM person_tbl WHERE name
REGEXP '^[aeiou]|ok$';一个正则表达式中的可以使用以下保留字
^
所匹配的字符串以后面的字符串开头\
mysql> select "fonfo" REGEXP "^fo$"; -> 0(表示不匹配)
mysql> select "fofo" REGEXP "^fo"; -> 1(表示匹配)
$
所匹配的字符串以前面的字符串结尾
mysql> select "fono" REGEXP "^fono$"; -> 1(表示匹配)
mysql> select "fono" REGEXP "^fo$"; -> 0(表示不匹配)
.
匹配任何字符(包括新行)
mysql> select "fofo" REGEXP "^f.*"; -> 1(表示匹配)
mysql> select "fonfo" REGEXP "^f.*"; -> 1(表示匹配)
a*
匹配任意多个a(包括空串)
mysql> select "Ban" REGEXP "^Ba*n"; -> 1(表示匹配)
mysql> select "Baaan" REGEXP "^Ba*n"; -> 1(表示匹配)
mysql> select "Bn" REGEXP "^Ba*n"; -> 1(表示匹配)
a+
匹配任意多个a(不包括空串) \
mysql> select "Ban" REGEXP "^Ba+n"; -> 1(表示匹配)
mysql> select "Bn" REGEXP "^Ba+n"; -> 0(表示不匹配)
a?
匹配一个或零个a \
mysql> select "Bn" REGEXP "^Ba?n"; -> 1(表示匹配)
mysql> select "Ban" REGEXP "^Ba?n"; -> 1(表示匹配)
mysql> select "Baan" REGEXP "^Ba?n"; -> 0(表示不匹配)
de|abc
匹配de或abc
mysql> select "pi" REGEXP "pi|apa"; -> 1(表示匹配)
mysql> select "axe" REGEXP "pi|apa"; -> 0(表示不匹配)
mysql> select "apa" REGEXP "pi|apa"; -> 1(表示匹配)
mysql> select "apa" REGEXP "^(pi|apa)$"; ->> 1(表示匹配)
mysql> select "pi" REGEXP "^(pi|apa)$"; -> 1(表示匹配)
mysql> select "pix" REGEXP "^(pi|apa)$"; -> 0(表示不匹配)
(abc)*
匹配任意多个abc(包括空串)
mysql> select "pi" REGEXP "^(pi)*$"; -> 1(表示匹配)
mysql> select "pip" REGEXP "^(pi)*$"; -> 0(表示不匹配)
mysql> select "pipi" REGEXP "^(pi)*$"; -> 1(表示匹配)
[a-dX]
匹配“a”、“b”、“c”、“d”或“X”
[^a-dX]
匹配除
“a”、“b”、“c”、“d”、“X”以外的任何字符。“[”、“]”必须成对使用 \
mysql> select "aXbc" REGEXP "[a-dXYZ]"; -> 1(表示匹配)
mysql> select "aXbc" REGEXP"^[a-dXYZ]$"; -> 0(表示不匹配)
mysql> select "aXbc" REGEXP "^[a-dXYZ]+$"; -> 1(表示匹配)
mysql> select "aXbc" REGEXP "^[^a-dXYZ]+$"; -> 0(表示不匹配)
mysql> select "gheis" REGEXP "^[^a-dXYZ]+$"; -> 1(表示匹配)
mysql> select "gheisa" REGEXP "^[^a-dXYZ]+$"; -> 0(表示不匹配)
WHERE子句
在我们使用数据库时,通常只会根据特定条件提取表数据的子集。只检索所需数据需要指定搜索条件(search criteria),搜索条件也称为过滤条件(filtercondition)。
WHERE子句支持的操作符
另一个特殊子句
比较运算符
组合
WHERE 子句
IN 操作符
指定条件范围,范围中的每个条件都可以进行匹配。IN取合法值的由逗号分隔的清单,全都括在圆括号中。
//查询age在18,19或20......的所有数据,功能与OR相似. SELECT name,age FROM sys_user WHERE age IN (18,19,20,21,22,23);
IN相比于OR的一些好处:
NOT操作符
否定它之后所写的任何条件。
BETWEEN 与日期类型(
NOT BETWEEN 与之相反)
当使用BETWEEN运算符与日期类型值时,要获得最佳结果,应该使用类型转换将列或表达式的类型显式转换为DATE类型。
要查询获取所需日期(requiredDate)从2013-01-01到2013-01-31的所有订单,但是这里要注意(查询的日期AND后面的默认为2019-5-11 00:00:00)也就是说无法查询出2019-05-11当天日期。
想知道怎么办么,请持续关注博主的博文(前台、后台、sql都可以处理哦)。
LIMIT
在
SELECT 语句中使用
LIMIT 子句来约束结果集中的行数。
LIMIT 子句接受一个或两个参数。两个参数的值必须为零或正整数。
语法:
LIKE操作符(NOT LIKE与之相反)
%通配符
通配符
下划线(_)。下划线只匹配单个字符,用法同%
注意
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70000438/viewspace-2786468/ ,如需转载,请注明出处,否则将追究法律责任。