码迷,mamicode.com
首页 > 其他好文 > 详细

Regex 正则零宽断言

时间:2015-12-09 19:24:25      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:

http://baike.baidu.com/link?url=sLfovpZmIcS5Uz_tiidXoVtjl30Tu3wARMfhnEcbgEGzsb8g1z7dvtGNXTulu1KDodmiuTAP5ODr_R5D2myeeq

 

零宽断言

1_1、(?=exp)   零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp

1_2、(?<=exp) 零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp

负向零宽

2_1、(?!exp)零宽度负预测先行断言,断言此位置的后面不能匹配表达式exp

2_2、(?<!exp)零宽度负回顾后发断言来断言此位置的前面不能匹配表达式exp

举例1

1_1,1_2: (?<=(aa|bb)).+?(?=ing) 匹配以aa或bb开头,ing结束之间的字符

aabbingxxing

匹配结果: 1.bb 2.ingxx

  第一次从aabbing匹配出bb,当前匹配到字符串第四个位置,剩下的字符串是ingxxing

  由于(?<=exp)不占宽度,ingxxing前面是bb,连起来就是bbingxxing,所以匹配出ingxx

 (注: 以上解释只是个人根据结果推测出来的,说法可能不一定准确,但结果经过测试是正确的,只是方便理解,

     aabb1ingxxing 通过这个正则匹配出来的结果是:bb1

举例2:

2_1,2_2 : (?<!(a1|b2))\\d{1,}?(?!ing)

a1b23ingxxing a844ing cc66dd只有3被过滤掉了,3前面是b2后面是ing

匹配结果: 1,2, 8,4,6,6

 

            Regex titleRegex3 = new Regex("(?<!(a1|b2))\\w{2,}?(?!ing)" );
            String strong3 = "a1b23ingxxinga844ingcc66dd";
            MatchCollection mcs3 = titleRegex3.Matches(strong3);

            for (int i = 0; i < mcs3.Count; i++)
            {
                Console.WriteLine(i + "---" + mcs3[i].Value);
            }

           匹配结果

          0---a1, 1---23i, 2---ng, 3---xxi, 4---ng, 5---a8,

          6---44i, 7---ng, 8---cc, 9---66, 10---dd

 

 

 

Regex 正则零宽断言

标签:

原文地址:http://www.cnblogs.com/c2603/p/5033191.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!