简介
javascript正则
语法说明
- 修饰符
g
全局匹配i
忽略大小写m
多行匹配
匹配说明
- 两种模糊匹配
1 | // 横向模糊匹配 |
- 字符组
1 | // [abc]表示匹配一个字符,它可以是"a"、"b"、"c"之一 |
- 贪婪匹配尽可能多的匹配;惰性匹配尽可能少的匹配。惰性匹配可以基于
?
实现
1 | var str = "123 1234 12345 123456"; |
- 多选分支
1 | "good idea, nice try.".match(/good|nice/g); // ["good", "nice"] |
案例
1 | // 匹配16进制颜色值 |
- 提取数据
1 | // 提取百度网盘数据 |
- vscode正则替换
1 | // 可以将如"title: 'abc'"换成"title: '{{ abc }}'" |
java
匹配符/元字符/限定符
1 | ## 或 |
模式修饰符
- 在正则的开头指定
(?i)
使正则忽略大小写(?s)
表示单行模式(”single line mode”)使正则的.
匹配所有字符,包括换行符(?m)
默认为多行模式。表示多行模式(”multi-line mode”),使正则的^
和$
匹配字符串中每行的开始和结束
- 案例
1 | // 忽略大小写 |
惰性匹配
1 | // (.*?) 惰性匹配 |
分组和反向引用
- 分组:使用
()
进行分组 - 反向引用:
$0
代表整个正则表达式,$1
代表第一个括号正则表达式,$2
代表第二个括号正则表达式,依次类推matcher.group()
表示整个正则匹配到的内容,matcher.group(1)
表示第一个括号匹配到的内容,依次类推
- 当我们在小括号
()
内的模式开头加入?:
,那么表示这个模式仅分组,但不创建反向引用。不创建反向应用将不能使用group(x)
1 | // (1) 去除单词与 , 和 . 之间的空格 |
正反前瞻后瞻
https://blog.csdn.net/xys_777/article/details/8642566
https://www.iteye.com/blog/xixian-1323630
https://www.iteye.com/blog/xixian-721147
https://blog.csdn.net/iterzebra/article/details/6795857正向前瞻
string(?=pattern)
- 在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用
- 例如 ‘Windows (?=95|98|NT|2000)’ 能匹配 “Windows 2000” 中的 “Windows” ,但不能匹配 “Windows 3.1” 中的 “Windows”
- 反向前瞻
string(?!pattern)
- 例如 ‘Windows (?!95|98|NT|2000)’ 能匹配 “Windows 3.1” 中的 “Windows”,但不能匹配 “Windows 2000” 中的 “Windows”
- 正向后瞻
(?<=pattern)string
- 反向后瞻
(?<!pattern)string
- 案例
1 | // 匹配非某字符开头的,匹配非CN开头的字符串 |
Matcher
- matches() 是全部匹配(要完全符合表达式)
- find() 是部分匹配。如果匹配成功,还可使用下列方法
- start() 匹配的子串在输入字符串中的索引位置
- end() 匹配的子串的最后一个字符在输入字符串中的索引位置
- group() 返回匹配到的子字符串
1 | Pattern pattern = Pattern.compile ("\\d{4,6}"); |
String的matches
1 | "hi, hello world".matches("(.*)hello(.*)"); // true |
常见案例
- 校验
1 | // 正在表达式变量拼接 |
- 正则替换
- replace 普通字符串替换所有
- replaceFirst 正则替换第一个匹配的
- replaceAll 正则替换所有的
1 | // 去掉非字母数字 |
- 匹配中文
1 | String str = "hello world 你好" |
- 匹配括号对
1 | String dakuohao = "{a+b}={c+d}>{d}"; |
IDEA正则
- 正则表达式替换 https://blog.csdn.net/u011615002/article/details/117621582
- IDEA正则表达式 https://blog.csdn.net/qq_41296917/article/details/111530450
- 如wm_concat增加to_char语句包裹
- 搜索
wm_concat\((.*?)\)
替换为to_char(wm_concat($1))
- 上述方法只能解决部分简单SQL,对于一些复杂的SQL反括号位置可能会有问题
- 搜索
python
1 | # 提取()中的字符串. eg: hello, (test) ni (hao)! |
php
1 | // 获取url中某个参数值 |