小程序开发定制Mysql语句的RegExp的用法与案例

的RegExp小程序开发定制的用法与案例

一、RegExp基本语法



字符描述
^小程序开发定制从开始行开始匹配
$小程序开发定制从末端行开始匹配
.小程序开发定制匹配任意单个字符除了换行符
[ ][ ] 小程序开发定制内为字符集,匹配 [ ] 内任一字符
[^ ]匹配除了方括号里的任意字符
*匹配零个或多个在它前面的字 符
+匹配前面的字符 1 次或多次
?匹配 0 或 1 个 ?号前的字符。
{n,m}匹配前面的字符串至少 n 次, 至多 m 次
(xyz)匹配与 xyz 完全相等的字符串
\s匹配任意单个字符除了换行符
\转义字符,匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \
[.characters.]  在括号表达式中(使用[]),匹配用于校对元素的字符序列,字符为单个字符或新行等字符名mysql> SELECT ‘~’ REGEXP ‘[[.~.]];                                                        -> 1mysql> 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类中的字母数字字符或下划线(_)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

二、Mysql使用RegExp案例

案例1:在json数据里面,找到class_detail_students_id这个字段,并且数据包含学生编号“58888828”

思路:在这个数据 -> {"class_id":2,"class_detail_students_id":",58888881,58888828,58888881,"}需要查找 -> class_detail_students_id 这个字段并查看 -> ,58888881,58888828,58888881, 里面是否包含58888828注意点:数据里面有双引号,这是regexp数据可以用单引号包围,里面的双引号用\\转义匹配规则regexp ==>'(\\"class_detail_students_id\\")(:\\")[(0-9)|,]*(,58888828,)[(0-9)|,]*(\\")'解答完整的sql:select * from mole_class_detail_change where current_value regexp '(\\"class_detail_students_id\\")(:\\")[(0-9)|,]*(,58888828,)[(0-9)|,]*(\\")'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

案例2:匹配000000002 _ _ _ _ _ _ _ _ 1900 和 000000003 _ _ _ _ _ _ _ _1700,其中"__" 这是8个空位,只能是数字

思路:这是两个字符串,都空出中间8为数字,可以用"()"(000000002) -> 匹配  "000000002"[[:digit:]] -> 匹配  数字字符{8}			-> 匹配前一个括号里面8次|			-> 或的意思解答完整的sql:select * from mole_class_detail_change where class_detail_code regexp '((000000002)([[:digit:]]{8})(1900))|((000000003)([[:digit:]]{8})(1700))'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

案例3:每个用户有多个身份权限,查询用户同时有a、b 、 c 权限的用户

上方截图展示了表数据 和分组查询的结果.	->	匹配任意单个字符除了换行符*	->	匹配零个或多个在它前面的字符+	->	匹配1个或多个在它前面的字符[abc]	->	匹配a/b/c里面的一个字符[,|,.+,]	-> 	匹配','(逗号) 或者 ',abcfdg等等,'(逗号包围的数据)匹配规则regexp	==>	 '.*,[abc][,|(,.+,)][abc][,|(,.+,)][abc][,|(,.+,)]'解答完整的sql:select user_id,concat(',',GROUP_CONCAT(DISTINCT role_id),',') as group_role from test GROUP BY user_id having group_role regexp '.*,[abc][,|(,.+,)][abc][,|(,.+,)][abc][,|(,.+,)]'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发