学习笔记——精通正则表达式
排除型字符组
用[ ^。。。]取代[。。。],这个字符组就会匹配任何未列出的字符。
请记住,排除型字符组表示“匹配一个未列出的字符”,而不是“不要匹配列出的字符”(ss:就是说一定要匹配一个字符,并且这个字符不是字符组列出的)。
一个字符组,即使是排除型字符组,也需要匹配一个字符。
一个字符组只能匹配目标文本中的单个字符,而每个多选结构(|)自身都可能是完整的正则表达式,都可以匹配任意长度的文本。
元字符小结
元字符 |
匹配对象 |
|
. [。。。] [^。。。] |
点号 字符组 排除型字符组 |
单个任意字符 列出的任意字符 未列出的任意字符 |
^ $ \< \> |
脱字符 美元符 反斜线-小于 反斜线-大于 |
行的起始位置 行的结束位置 单词的起始位置 单词的结束位置 |
| (。。。) |
竖线 括号 |
匹配分割两边的任意一个表达式 限制竖线(多选项)的作用范围;将若干个字符组合为一个单元,以接受问号或星号之类量词的作用 |
注意:字符组内部,元字符的定义规则和意义不一样。如:在字符组外部,点号是元字符,但是内部不是;连字符只有在字符组内部并且不紧接着[或[^,才是元字符;
脱字符在字符组内部并且紧接着[表示的意义和在字符组外部表示的元字符意义不一样(ss:脱字符在字符组内部并且没有紧接着[时就是普通字符)。
表示重复的元字符
次数下限 |
次数上限 |
含义 |
|
? |
无 |
1 |
可以不出现,也可以只出现一次(单次可选) |
* |
无 |
无 |
可以出现无数次,也可以不出现(任意次数均可) |
+ |
1 |
无 |
可以出现无数次,但至少要出现一次(至少一次) |
括号及反向引用
在许多流派的正则表达式中,括号能够“记住”它们包含的子表达式匹配的文本。
在一个表达式中可以使用多个括号,再用\1,\2,\3等来表示第一、第二、第三组括号匹配的文本。
括号是按照开括号“(”从左到右的出现顺序进行的。
注意:egrep把每行文字都当作一个独立部分来看待。