几个概念及理解:
1、正则表达式是强大,便捷,高效的文本处理工具。
2、利用正则表达式能够添加、删除、分离、插入和修整各种类型的文本和数据。
3、要学会用正则表示达式来思考。
4、完整的正则表达式由两种字符构成:特殊字符(元字符),文字(普通文本字符)。
5、元字符的描述能力是正则表达式的核心。
6、元字符相当于人类语言的语法。^(From|Subject): 其中 ^ , ( , | , ) 都是元字符。
正则表达式的思维框架
完整的正则表达式由小的的构建模块单元组成,每个单元都很简单,但他们能够以无穷多种组合。
1)行的起始和结束^:行的开始
$:行的结束
他们匹配的是一个位置而不是具体的文本。2)字符组
1、匹配若干字符之一:
正则表达式结构体:容许使用者列出在某处期望匹配的字符,通常被称作字符组。
[ea]:匹配e或者a
gr[ea]y:匹配时先找到g,接着是r,然后是一个a或者e,最后是一个y
重要:字符组的意思就是“或”,在字符组内部“-”(连字符)表示一个范围
如:H[1-6]等同于H[123456]
[0-9a-fA-F] 等同于 [0123456789abcdefABCDEF] 也等同于 [A-Fa-f0-9] 也等同于 [a-f0-9A-F] 也等同于 [a-fA-F0-9],这叫多重组和。
[0-9A-Z_!.?] 匹配一个数字,大写字母,下划线,叹号,点号,问号
重要:只有在字符组内“-”(连字符)才是“元字符”,否则只能匹配普通的连字符,但并不意味着在字符组内一定就是元字符,如果出现在开头只表示普通连字符。问号(?)和点号(.)通常是元字符,但在字符组内他们都是普通字符了。2、排除型字符组:
在字符组中出现^表示排除,列出的是不希望匹配的字符。
[^1-6] 匹配除1到6字外的任何字符,注意是任何字符!
重要:^在字符组外表是一个行的开始(锚点),在字符组内(且紧接在字符组的第一个方括号([) 之后)表示排除。
匹配未列出的字符 不等于 不要匹配列出的字符3、用点号匹配任意字符:
元字符(.)是用来匹配任意字符的字符组的简便写法。
03[-./]19[-./]76 匹配:03/19/76 , 03-19-76 , 03.19.76 ,192033197639 ,但可能192033197639不是我们期望的结果,这是就要在对目标的了解程度和精准之间找一个平衡。3)多选结构
1)匹配任意子表达式
关键要理解子表达式中的“子”,子表达式用“|”分割开,表示“或”,每个子表达式称作“多选分支”。
括号()对于子表达式是必须的,本身就是元字符。
格式:(子表达式1|子表达式2|子表达式3| ...)
例子:(First|1st)==(Fir|1)st
Jeffrey|Jeffery == Jeff(er|re)y == Jeff(ery|rey)
注意:多选结构与字符组是有根本的区别的,字符组只能由普通单字符构成分支,而多选结构的分支是可以由任何完整的表达式构成的,可以匹配任意长度的文本。
重要提示:在包含多选结构的表达式中使用^和$要格外小心,比较:
^From|Subject|Date: 和 ^(From|Subject|Date):
两者匹配的结果完全不同,前者会匹配:^From或者Subject或者Date:显然不是我们要的结果,所以有必要使用括号来进行限定。
(待续)