Regex 正则零宽断言
http://baike.baidu.com/link?url=sLfovpZmIcS5Uz_tiidXoVtjl30Tu3wARMfhnEcbgEGzsb8g1z7dvtGNXTulu1KDodmiuTAP5ODr_R5D2myeeq
?
零寬斷言
1_1、(?=exp)?? 零寬度正預測先行斷言,它斷言自身出現(xiàn)的位置的后面能匹配表達式exp
1_2、(?<=exp) 零寬度正回顧后發(fā)斷言,它斷言自身出現(xiàn)的位置的前面能匹配表達式exp
負向零寬
2_1、(?!exp)零寬度負預測先行斷言,斷言此位置的后面不能匹配表達式exp
2_2、(?<!exp)零寬度負回顧后發(fā)斷言來斷言此位置的前面不能匹配表達式exp
舉例1
1_1,1_2: (?<=(aa|bb)).+?(?=ing) 匹配以aa或bb開頭,ing結(jié)束之間的字符
aabbingxxing
匹配結(jié)果: 1.bb 2.ingxx
? 第一次從aabbing匹配出bb,當前匹配到字符串第四個位置,剩下的字符串是ingxxing,
? 由于(?<=exp)不占寬度,ingxxing前面是bb,連起來就是bbingxxing,所以匹配出ingxx
?(注: 以上解釋只是個人根據(jù)結(jié)果推測出來的,說法可能不一定準確,但結(jié)果經(jīng)過測試是正確的,只是方便理解,
???? aabb1ingxxing 通過這個正則匹配出來的結(jié)果是:bb1)
舉例2:
2_1,2_2 : (?<!(a1|b2))\\d{1,}?(?!ing)
a1b23ingxxing a844ing cc66dd只有3被過濾掉了,3前面是b2后面是ing
匹配結(jié)果: 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);
??????????? }
?????????? 匹配結(jié)果
????????? 0---a1, 1---23i, 2---ng, 3---xxi, 4---ng, 5---a8,
????????? 6---44i, 7---ng, 8---cc, 9---66, 10---dd
遞歸匹配:
匹配所有div及div中有嵌套的div
??? <div[^>]*>
?? ?? [^<>]*
?? ??? ( (
?? ??? ??? (?'Open'<div[^>]*>)
?? ??? ??? [^<>]*
?? ??? ? )+
?? ??? ? (
?? ??? ??? (?'-Open'</div>)
?? ??? ??? [^<>]*
?? ??? ? )+
?? ??? )*
?? ?? (?(Open)(?!))
?? ?</div>
???? 能匹配出
<div>aa</div>
?????????? <div>aa <div> bb <div>cc</div></div></div>
????? div中包含其他標簽的不能匹配出來,如<div>aa<span>bb</span></div>
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/c2603/p/5033191.html
總結(jié)
以上是生活随笔為你收集整理的Regex 正则零宽断言的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 易呗易货是干什么的
- 下一篇: 幸福分期信用卡怎么使用