正则表达式 学习总结
意义:判断一个字符序列是否与一个模板匹配
使用建议:及时备份
匹配原则:匹配之间互不覆盖,即在文本12345
中使用\d{3}
只找到123
使用环境
工具
1.cmd
查询版本findstr /?
查询文本find /N(行号) (正则表达式) *.*(文件名 支持正则表达式)
注:cmd 仅支持少量正则表达式语法
2.WPS/Microsoft Word(Excel…) /…
CTRL F
注:仅支持通配符?
*
3.Open Office.org Writer
4.Notepad++/Sublime text/…
语言
1.Java/Java Script (RegExp/String 实现)
2.VB Script
3.Visual Basic .NET
4.C#
5.Perl
6.My SQL/SQL Server 2000
元字符
直接匹配
car
:car
限定字符
1.?
字符
块?
:块中内容可以匹配或不匹配(尽可能匹配)
例:colou?r'?
:color;colour;color';colour'
匹配?
:\?
2.*
字符
块*
:块中内容可以不匹配,也可以匹配多次(尽可能匹配)
例:colo*r
:colr;color;coloor;colooooooor
匹配*
:\*
3.+
字符
块+
:块中内容匹配至少一次(尽可能匹配)
例:colo+r
:color;coloor;colooooooor
匹配+
:\+
4.大括号语法
(1)块{n}
:块中重复n次
(2)块{n,m}
:块中重复n~m次
(3)块{n,}
:块中重复n~+∞次
元字符
模板字符 | 匹配字符 |
---|---|
. | 几乎所有字符(存在版本区别) |
\. | . |
\w | 英文字母,汉字,希腊字母…;数字;下划线 |
\W | 除去\w 字符 |
\d | 数字 |
\D | 除去\d 字符 |
\s | 空格;制表符;换行符 |
\S | 除去\S 字符 |
\t | 制表符 |
\n | 换行符 |
\\ | \ |
^A | 行首A |
[^AB] | 非A and 非B |
[ABC^D] | A or B or C or ^ or D |
\^ | ^ |
A$ | 行末A |
\$ | $ |
\<A | 词首A |
A\> | 词末A |
\bA | =\<A |
A\b | =A\> |
\B | 非词的边界 |
匹配空行:^$
##字符类
模板 | 匹配 |
---|---|
[yieee2d] | y or i or e or 2 or d |
[C-Q];[t-x];[2-5] | C~Q;t~x;2~5 |
\[;\] | [;] |
[C-Qu-z3-9] | C~Q or u~z or 3~9 |
注意:
1.慎用[A-z]
:编码表不连续
2.慎用[4-3][c-a]
:版本不同,意义不同
3.[.-/]
不表示. or - or /
,表示. ~ /
—> [-./] or [-/.]
4.Java中支持&&:[A-Z&&[^B-D]]
5.部分支持[:alnum:]
:[A-Za-z0-9]
圆括号与双向查找
圆括号的作用
1.对字符进行分块:使用限定符
(United)( )(States){3}
2.选择性
(A|B|DFF)
:A or B or DFF
注意:顺序匹配,即(a|ab)
无法匹配ab
(不覆盖原则) —>(ab|a)
3.捕获圆括号:参加编号的圆括号
(正则表达式)
编号规则:依据左括号出现的顺序从1开始
(A2){7}(B342){2}(C423(D2E2R){2}){5}
Python/.NET/… 语言支持对分出的组进行命名
Python (?P<华丽的名字>正则表达式)
.NET (?<华丽的名字>正则表达式) or (?'华丽的名字'正则表达式)
4.非捕获圆括号:不参加编号的圆括号
(?:正则表达式)
5.反向引用
\number
:与分组number的字符一模一样
例:([A-Za-z])([t-y])\1\2
可匹配形如TuTu eyey rxrx
等,不可匹配uuyt
双向查找
模板|匹配
:-:|:—
fnoi2014xtx(?=\d{2})
|只匹配后面紧邻两个数字的fnoi2014xtx
fnoi2014xtx(?!\d{2})
|只匹配后面不紧邻两个数字的fnoi2014xtx
(?<=\d{2})fnoi2014xtx
|只匹配前面紧邻两个数字的fnoi2014xtx
(?<!\d{2})fnoi2014xtx
|只匹配前面不紧邻两个数字的fnoi2014xtx
注:匹配位置:(?<=S)(?=A)
贪婪 懒惰 占有
贪婪:首先匹配整个字符串,尝试匹配时选定尽可能多的内容,失败后回退
懒惰:从目标起始位置开始匹配,每次向后一个字符
占有:只尝试一次
限定符默认贪婪
限定符懒惰化
*? ; +? ; ?? ; {n,m}? ; {n,}?