的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