CarisL / noteBook

平时自己学习的过程中的积累
0 stars 0 forks source link

初探正则表达式(精通正则表达式第一章) #11

Open CarisL opened 6 years ago

CarisL commented 6 years ago

正则表达式一般分为两个部分:元字符(特殊字符)+ 普通字符

Egrep元字符(Egrep:检索文本文件)

1.行的开始与结束

/^/:表示文本的开头,将表达式“锚定”在一行的开头。 /$/:表示一行的结尾。 /^cat/:表示的是以c作为一行的开头,接着是a,紧接着是c的文本。

eg: /^$/:文字意义匹配的是行开头,然后就是末尾。应用意义是表示空行(没有任何字符,包括字符)。 /^/:文字意义匹配的条件是行的开头。应用意义:没有意义!(因为每一行都有开头,每一行都有匹配)

2.字符组

字符组元字符连字符-表示的是一个范围。

eg:/[A-Z]/:表示的是大写的A到Z的任意字符。

排除型字符组

/[^...]/代替[...]表示的是这个字符组匹配任何未列出的字符。这个字符组开头的/^/表示的是不希望匹配的字符。

在字符组外行部,表示的是一个行锚点,代表一行的开头。但是在字符组内部(并且只能跟在字符组第一个方括号后),他就是一个元字符

3.用点号匹配任意字符

元字符/./是用一个用来“匹配任意字符”的占位符。

eg:/91.1.1/:可以匹配91-1-1、91/1/1、91,1,1等等许多种情况。其中的.只是一个占位符而已。

4.多选结构

|(或)

可以把不同的子表达式用一个总的表达式来表达。总的表达式又可以匹配任意的子表达式。 eg:grey和gray可以匹配的正则表达式有:/grey|gray/或者/gr(a|e)y/

/gr(a|e)y/补充说明: 1.用括号划定多选结构的范围,正常情况下,括号也是元字符。 2.但/gr[a|e]y/是不符合我们的要求的,在字符组[ ]内部,| 是跟a、e一样的普通字符而已。 3./gr(a|e)y/的括号是必须的。如果去掉括号便成了/gra|ey/这样只会匹配到,gra或者er字符串。很明显,这个跟我们预期的想象不符合。 多选结构可以表达很多字符,但是不能超越括号的界限

5.忽略大小写

命令行参数 -i 可以表示忽略大小写匹配。记得要将-写在正则表达式之前。

6.单词分界符

元字符序列/\</ /\>/)就可以用来匹配单词分界的位置。 以刚开始cat的例子为例:/\<cat/可以表示以cat开头的单词。/cat\>/表示cat结尾的单词。 <>并不是元字符,当他们与\连用的时候,整个序列才有特殊意义,这边是元字符序列名称的由来 并不是所有的egrep都可以识别单词分界符~~

7.可选项元素

元字符?代表的是可选项。把他加在一个字符的后面代表此处容许出现这个字符,不过他的出现并非匹配成功的必要条件。

eg: color和colour的匹配可以用colou?r来匹配。u?这个元字符只作用于之前紧邻的元素。 colou?r的意思是c,然后是o,然后是l,然后是o,然后是u?,最后是ru?是必然会匹配成功的。有时他会匹配一个u,其他时候不匹配任何字符。

8.重复出现

元字符+号表示之前紧邻的元素出现一次或者多次。表示匹配尽可能多次,如果一次匹配都无法完成,就报告失败。 *元字符``表示之前紧邻的元素出现任意多次,或者不出现。**表示匹配尽可能多的次数,如果实在无法匹配,也不打紧。

9.神奇的转义

使用反斜杠称为转义符,它作用的元字符会失去特殊的含义。