当以艺术眼光看程序,寻找程序后面的原理,做到化而不忘
全部博文(57)
分类: Windows平台
2014-06-08 19:31:31
在正则表达式中有,如果没有环视,则只有两个结果:匹配和不匹配。而有了环视,则相当于为匹配附加了条件,且并非真正的匹配,只是试探一下。这就可以在不匹配的情况下进行定位。环视又叫断言,预搜索。
环视按照方向划分有顺序和逆序两种,按照是否匹配有肯定和否定两种,组合起来四种环视。顺序环视相当于在当前位置右侧附加一个条件,而逆序环视相当于在当前位置左侧附加一个条件。(这部分是抄的)
表达式 |
说明 |
(?<=Expression) |
逆序肯定环视,表示所在位置左侧能够匹配Expression |
(? |
逆序否定环视,表示所在位置左侧不能匹配Expression |
(?=Expression) |
顺序肯定环视,表示所在位置右侧能够匹配Expression |
(?!Expression) |
顺序否定环视,表示所在位置右侧不能匹配Expression |
怎么记呢?感觉这个结构很像C中的用法,!表示否定(!=,=号省略了),=表示肯定,<表示逆序(向左是逆向,因为一般理解向右是顺序),没有<就是顺序,?是模式的符号标志。环视也就是表示左侧或右侧能出现或不能出现表达式。简单理解:环视=有条件地试匹配。
另外,可以看到,环视两边,也就是对边界提出了要求,所以,我觉得环视的本质可理解为非匹配的条件边界。