1. 平衡組/遞迴匹配
(?'group') 將名為group對應的內容,壓棧計數;
(?'-group') 將名為group的對應的內容, 出棧計數
(?!) 零寬負向先行斷言,由於沒有尾碼運算式,試圖匹配總是失敗
正則範例:
,{0,1}"5":\[[^\[\]]*(((?'Open'\[)[^\[\]]*)+((?'-Open'\])[^\[\]]*)+)*(?(Open)(?!))\],{0,1}
測試資料:
{"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>)
測試資料:
<li><a href="#updatelog">更新紀錄</a></li>
比對結果:<a href="#updatelog">更新紀錄</a>
評語:這個寫的很不錯。可以取開始取結束,不過不能在<a>....</a>中再出現<a>...</a>的情況,還好HMTL裡不讓<a>中再出現<a>。如果像DIV這樣的,就得用下面的樣子寫了。
<[^<>]*(((?'Open'<)[^<>]*)+((?'-Open'>)[^<>]*)+)*(?(Open)(?!))>
<div class="note">aaa<div>其它可用的測試載入器:</div>bbbb</div><div><a href="www.*****.com">gogogo</a></div>