您当前的位置: 首页 >  数据结构与算法

暂无认证

  • 0浏览

    0关注

    96093博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

[数据结构与算法]模式匹配与文本处理-零宽度正预测先行断言 and 零宽度正回顾后发断言

发布时间:2016-09-23 08:39:02 ,浏览量:0

msdn中的描述如下:

(?= 子表达式)

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

(?<= 子表达式)

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

msdn描述的比较清楚,

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

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

 1using System;  2using System.Collections.Generic;  3using System.Text;  4using System.Text.RegularExpressions;  5  6namespace practice  7{  8    public class myclass  9    { 10        public static void Main() { 11            Regex pattern1 = new Regex(@"(?<=Red-)\w{3}"); 12 13            MatchCollection match = pattern1.Matches("Red-abc");//Only get "abc" 14            foreach (Match one in match) { 15                System.Console.WriteLine("===="+one.Value); 16            } 17 18            pattern1 = new Regex(@"Red-(?<=Red-)\w{3{"); 19 20            match = pattern1.Matches("Red-abc");//Could get the whole word including "Red-" 21            foreach (Match one in match) { 22                System.Console.WriteLine("+++++" + one.Value); 23            } 24            return; 25        } 26    } 27}

下面讲下我的理解:

(1).零宽度

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

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

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

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

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

转自:http://www.cnblogs.com/creek/archive/2009/04/04/1429600.html

关注
打赏
1655516835
查看更多评论
立即登录/注册

微信扫码登录

0.0517s