1. JavaScript RegExp 参考手册
2. MySQL REGEXP:正则表达式查询
3. MySQL中REGEXP正则表达式使用大全
| 字符 | 描述 |
|---|---|
| ^ | 从开始行开始匹配 |
| $ | 从末端行开始匹配 |
| . | 匹配任意单个字符除了换行符 |
| [ ] | [ ] 内为字符集,匹配 [ ] 内任一字符 |
| [^ ] | 匹配除了方括号里的任意字符 |
| * | 匹配零个或多个在它前面的字 符 |
| + | 匹配前面的字符 1 次或多次 |
| ? | 匹配 0 或 1 个 ?号前的字符。 |
| {n,m} | 匹配前面的字符串至少 n 次, 至多 m 次 |
| (xyz) | 匹配与 xyz 完全相等的字符串 |
| \s | 匹配任意单个字符除了换行符 |
| \ | 转义字符,匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \ |
[.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类中的字母数字字符或下划线(_)
案例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)|,]*(\\")'

案例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))'