1. 正则表达式的开发一定要使用工具(除非特别简单的),推荐RegExBuilder.
  2. 最难以理解的是零宽断言和组,其中捕获组说明如下

  (?'group') 把捕获的内容命名为group,并压入堆栈(Stack)

  (?'-group') 从堆栈上弹出最后压入堆栈的名为group的捕获内容,如果堆栈本来为空,则本分组的匹配失败

  (?(group)yes|no) 如果堆栈上存在以名为group的捕获内容的话,继续匹配yes部分的表达式,否则继续匹配no部分

  (?!) 零宽负向先行断言,由于没有后缀表达式,试图匹配总是失败

 3.   正则表达式的本身,是(位置+长度)的匹配,而且匹配的部分,要满足正则表达式位置的连续。而零宽断言中的

(?=exp)

匹配exp前面的位置

(?<=exp) 匹配exp后面的位置

 都是匹配位置。

 4.经过艰苦的思考,发现(?<=exp)的exp部分是从右向左匹配字符串的。

比如,下面的正则表达式,因为(?(t)(?'f'')|(?'x'"))* 先执行,会给x的组加上匹配,这样会导致(?(x)()|()),只会执行红色的部分。

 (?<=^[^'"]*
(?(x)()|())
[^'"]*
(?(t)(?'f'')|(?'x'"))*
[^'"]*
)
1

    5.  <的都应该出现在前面,比如

(?<!exp) 匹配前面不是exp的位置

(?<=exp) 匹配exp后面的位置

 

posted @ 2010-05-17 13:07 星际迷茫 阅读(72) 评论(0) 编辑