苛锐克

One step at a time!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

msdn中的描述如下:

(?= 子表达式)

(零宽度正预测先行断言。) 仅当子表达式在此位置的右侧匹配时才继续匹配。例如,\w+(?=\d) 与后跟数字的单词匹配,而不与该数字匹配。此构造不会回溯

(?<= 子表达式)

(零宽度正回顾后发断言。) 仅当子表达式在此位置的左侧匹配时才继续匹配。例如,(?<=19)99 与跟在 19 后面的 99 的实例匹配。此构造不会回溯

msdn描述的比较清楚,

如:\w+(?=ing) 可以匹配以ing结尾的单词(匹配结果不包括ing),

(?<=Red-)\w+,匹配Red- 后边的单词。

Code

 

下面讲下我的理解:

(1).零宽度

这表示匹配是一个位置(Loaction)而不是子表达式。

(2).预测先行,回顾后发

(?= 子表达式),预测先行, 返回与子表达式匹配的前面位置,从做左到右匹配。

(?<= 子表达式),回顾后发,返回与子表达式匹配的后边位置,从右到左匹配。

我们可以想象有在模式匹配过程中有一指针标志当前匹配的位置,这样当子表达式匹配时 预测先行 把指针指到子表达式前边,回顾后发则为后边。可以参考上边代码。

 

 

 

posted on 2009-04-04 22:16  苛锐克  阅读(3401)  评论(0编辑  收藏  举报