1.规则
1.1 匹配位置(定位符)
1 | ^ 匹配输入字符串的开始位置 |
1.2 指定匹配内容
1 | x|y 匹配x或y |
1.3 匹配任意字符
1 | . 匹配除换行符(\n、\r)之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用像"(.|\n)"的模式。 |
1.4 匹配次数(限定符)
格式:<匹配内容><匹配次数>
1 | * 匹配前面的子表达式零次或多次 |
1.5 子表达式
1 | ( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \) |
1.6 获取匹配、非获取匹配
获取匹配1
(pattern) 匹配pattern并获取这一匹配
非获取匹配1
2
3
4
5(?:pattern) 匹配pattern但不获取匹配结果
(?=pattern) 正向肯定预查(look ahead positive assert),在任何匹配pattern的字符串开始处匹配查找字符串
(?!pattern) 正向否定预查(negative assert),在任何不匹配pattern的字符串开始处匹配查找字符串
(?<=pattern) 反向(look behind)肯定预查,与正向肯定预查类似,只是方向相反
(?<!pattern) 反向否定预查,与正向否定预查类似,只是方向相反
1.7 转义字符
1 | \ 转义字符 |
1.8 控制字符匹配
1 | \cx 匹配由 x 指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。 |
1.9 快捷匹配
1 | \d 匹配一个数字字符。等价于 [0-9] |
1.10 十六进制数匹配
1 | \xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长 |
1.11 八进制数匹配
1 | \n 如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值 |
1.12 引用回溯
1 | \num 对所获取的匹配的引用。例如,'(.)\1' 匹配两个连续的相同字符 |
2.实战
2.1 查找字符
文本:1
2
3
4
5
6采购专用发票 PAULSH190905008, UNICO LDGISTICS CO...操作部, KATE.ZHU,
采购专用发票 PAULSHI90906002, UICO LDGISTICS CO...操作部, KATE.ZHU,
采购专用发票 PAULSHI90906003, UICO UDGISTICS CO...操作部, KATE.ZHU,
采购专用发票 PAULSH190906005, UNICO LDGISTICS C0...操作部, KATE.ZHU,
采购专用发票 PAULSH190908008, UICO LDGISTICS CO...操作部, KATE.ZHU,
采购专用发票 PAULSHI90906011, UNICO LDGISTICS CO...操作部, KATE.ZHU,
正则:
1 | 采购专用发票.+[0-9]{2} |
2.2 替换查找
工具:vscode
文本:1
2
3224276|901500014949|StopProfit|3|000510|新金路|{"profitRatio":"10","costPrice":4.614}
224182|918700000075|StopProfit|3|300241|瑞丰光电|{"lossRatio":"-6.5","costPrice":6.702}
224216|918700000075|StopProfit|3|000534|万泽股份|{"lossRatio":"-2.2","costPrice":9.683}
正则:
1 | 查找:\{"(\w+)":"(\d+)","(\w+)":([\d].*) |
结果:1
2
3224276|901500014949|StopProfit|3|000510|新金路|参数:profitRatio,值:10,参数:costPrice,值:4.614}
224182|918700000075|StopProfit|3|300241|瑞丰光电|{"lossRatio":"-6.5","costPrice":6.702}
224216|918700000075|StopProfit|3|000534|万泽股份|{"lossRatio":"-2.2","costPrice":9.683}
2.3 去除重复行
工具:sublime,vscode
文本:
1 | 918700000015 |
正则:
1 | 查找:^(.+)$[\r\n](^\1$[\r\n]{0,1})+ |
3.常用示例
3.1 校验数字的表达式
1 | 数字:^[0-9]*$ |
3.2 校验字符的表达式
1 | 汉字:^[\u4e00-\u9fa5]{0,}$ |
3.3 特殊需求表达式
1 | Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$ |
钱的输入格式:1
2
3
4
5
6
7
8
91.有四种钱的表示形式我们可以接受:"10000.00" 和 "10,000.00", 和没有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$
2.这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:^(0|[1-9][0-9]*)$
3.一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]*)$
4.这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧。下面我们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$
5.必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是 "10" 和 "10.2" 是通过的:^[0-9]+(.[0-9]{2})?$
6.这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$
7.这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
8.1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$
9.备注:这就是最终结果了,别忘了"+"可以用"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里
4.参考

blog 笔记: https://www.cnblogs.com/dingdangsunny/p/11253386.html