语法
| 基本 | |
|---|---|
| . | 任意单个字符 |
| | | 逻辑或 |
| [] | 字符集合 |
| [^] | 字符集合求非 |
| - | 区间定义 |
| \ | 字符转义 |
| () | 定义一个子表达式 |
| 数量 | |
|---|---|
| * | 0次或多次,懒惰模式 *? |
| + | 1次或多次,懒惰模式 +? |
| ? | 0次或1次 |
| {n} | n次 |
| {m,n} | m次和n次之间 |
| {n,} | n次以上,懒惰模式 {n,}? |
| 位置 | |
|---|---|
| ^ | 开头(\A) |
| $ | 结尾(\Z) |
| < | 单词开头 |
| > | 单词结束 |
| \b | 单词边界 |
| 特殊 | |
|---|---|
| \t | 制表 Tab |
| \v | 垂直制表符 Vertical tab |
| \n | 换行 Line feed |
| \r | 回车 Carriage Return |
| \f | 换页 Form feed |
| \s | 空白 space, \t, \n, \f, \r |
| \d | 数字 [0-9] |
| \w | 字母数字或下划线 [a-zA-Z_0-9] |
查找 (lookaround)
https://www.regular-expressions.info/lookaround.html
| 查找 | |
|---|---|
| ?: | non capturing group |
| ?= | positive look ahead |
| ?! | negative look ahead |
| ?<= | positive look behind |
| ?<! | negative look behind |
- 括号中的数字
(?<=\()[0-9]+(?=\)) (?!\()[0-9]+(?<!\))
替换匹配文本
- Java, JetBrains, vscode
$0 - PHP, EmEditor
\0 - JavaScript
$&
Reinserting Matched Text in The Replacement Text
常用匹配
中国18位身份证号
1 | \d{17}(\d|X|x) |
中国手机号码
1 | 1[34578][012356789]\d{8}|134[012345678]\d{7} |
邮箱
1 | ^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$ |
URL地址
1 | (https?:\/\/)?([\w\-])+\.{1}([a-zA-Z]{2,63})([\/\w-]*)*\/?\??([^#\n\r]*)?#?([^\n\r]*) |
IP地址
1 | /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/ |
1 | [\u4e00-\u9fa5] |
提取示例
提取括号中的数字
1 | (?<=\()[0-9]+(?=\)) -> \0 |
${param.xxx} 批量替换为 ${fn:escapeXml(param.xxx)}
1 | (?<=\$\{)param\..*?(?=\}) |
tsv内容转SQL insert
1 | 110000 a 1 北京市 |
vim中的使用
去除空行
1 | %s/^\s*\n/ |
去除行尾空格
1 | %s/\s\+\n/\r |
去除#注释行
1 | %s/^\s*#.*\n/ |
换行的文本转字符串拼接
1 | %s/\s*\n/" \+\r" |
‘逗号分隔行’ 与 ‘单行逗号分隔’ 转换
1 | %s/,\s*\n/,[ ] |
JavaScript中的使用
有两种方法可以创建正则表达式:通过字面量/pattern/flags,或new RegExp(pattern [, flags])。flags值可以是i(忽略大小写)g(全局匹配)m(多行匹配)
字面量方式判断是否全部数字组成:/^\d+$/.test('12a')
表达式方式
1 | var pat = new RegExp(this.currentL1 + "[\\d]{2}00"); |
Perl中的使用
下划线转驼峰
1 | my $n = 'mastering_regular_experssions'; |
使用
提取字幕内容
1 | 替换时间 ^\d\d:.*\n |
替换标注
1 | \[\d+\] |