1. 平衡組/遞歸匹配
(?’group’) 將名為group對應的內容,壓棧計數(shù);
(?’-group’) 將名為group的對應的內容, 出棧計數(shù)
(?!) 零寬負向先行斷言,由于沒有后綴表達式,試圖匹配總是失敗
正則樣例:
,{0,1}”5″:[[^[]]*(((?’Open'[)[^[]]*)+((?’-Open’])[^[]]*)+)*(?(Open)(?!))],{0,1}
測試數(shù)據(jù):
{“0”:[“0″,”0-1″,”0-2″],”1”:[“1″,”1-1″,”1-2″],”2”:[“2″,”2-1″,”2-2″],”3”:[“3″,”3-1″,”3-2″],”4”:[“4″,”4-1″,”4-2″],”5”:[“5″,”5-1″,”5-2”]}
比對結果:,”1″:[“1″,”1-1″,”1-2”],
評語:這個寫的很不錯。可以達到取出最近的一個]的效果
2. 零寬斷言
(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置
正則樣例:
(?<=<(w+)>).*(?=</1>)
測試數(shù)據(jù):
<li><a href=”#updatelog”>更新紀錄</a></li>
比對結果:<a href=”#updatelog”>更新紀錄</a>
評語:這個寫的很不錯??梢匀¢_始取結束,不過不能在<a>….</a>中再出現(xiàn)<a>…</a>的情況,還好HMTL里不讓<a>中再出現(xiàn)<a>。如果像DIV這樣的,就得用下面的樣子寫了。
<[^<>]*(((?’Open'<)[^<>]*)+((?’-Open’>)[^<>]*)+)*(?(Open)(?!))>
<div class=”note”>aaa<div>其它可用的測試工具:</div>bbbb</div><div><a href=”www.*****.com”>gogogo</a></div>