1.正则表达式只认识行和字符,所以平时考虑问题要从这个角度来考虑。比如 “^cat" ,理解为”以cat开始的行“和理解为”匹配行头字符为'c'然后跟着'a'然后跟着‘c'“从效果上看是一样的,但是后者更容易指出代码的实现方式,以及为性能优化提供参考。
2.正则表达式由元字符和文字两部分组成,其中是否为元字符需要结合上下文来看。比如"c*aa”和“c[*]”中前者'*'表示元字符,但后者不是。
3.正则表达式又很多小模块构成,这些小模块可以有很多组合,以满足我们的需求。
4."[....]"字符组,理解为从多个元素中匹配一个。要点
- 匹配一个字符且必须匹配一个字符。例如"a[bq]",如果出现行"aq"就能匹配,但是出现行”a"就不能匹配了。
- 排除型字符组[^...]匹配未列出的一个元素
- 字符组里面的元字符只有这里位于'['之后的'^',还有有引导的'-'才是元字符,其他的都不是,就是说[*.?]等都不是
5.'.'匹配一个非换行符的任意字符
6.了解需要处理的文件很重要,可以简化和优化正则表达式。
7.匹配任意子表达式'(expr1|expr2|expr3)',如果没有'()'则没有限定边界,在vim里面'()'需要使用转义字符。没有排除功能
8.单词分界符号'\<''\>'相当于行开始与结束。正则表达式不认识单词,这里只不过匹配字母和数字的开始和结束位置。
9.'x?',表示“这里允许出现一个x”,这个肯定是能匹配成功的。其中'x'不只是一个字符,还可以是子表达式,当为子表达式需要用'()'界定
10.量词"?*+"都是尽可能多的匹配。