亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

關于正則表達式的遞歸匹配問題

2019-11-17 02:55:51
字體:
來源:轉載
供稿:網友
關于正則表達式的遞歸匹配問題

經常會有這樣的需求,要求匹配出成對的小括號里的內容,

而一般正則表達式中的 ?R 的語法似乎在C#中不被支持, 在一番努力之下,終于找到以下一段描述

/( 應該是 /( 不是用 /轉義而是用 /來轉義

匹配嵌套的構造微軟公司已經包含了一個有趣的創新來匹配穩定的構造(歷史上,這是正則表達式所做不到的)。這并不容易掌握 — 盡管這節較短,但是注意,它非常的晦澀難懂。從一個例子開始可能更簡單一些,所以我用這段代碼作為開始:Regex r = new Regex(@"/((?>[^()]+|/((?<DEPTH>)|/)(?<-DEPTH>))*(?(DEPTH)(?!))/)");這能匹配到首個完全配對的括號組,比如"before (nope (yes (here) okay) after"里面的"(yes (here) okay)"。注意第一個左括號沒有被匹配到,因為沒有和它匹配的右括號。下面是它如何運作的概覽:1、在每個"("被匹配到的時候,"(?<DEPTH>)"在這里加上一,告訴正則表達式系統當前括號嵌套的深度( 正則表達式開頭的"/("不包括在這里)。2、在每個")"被匹配到的時候,"(?<-DEPTH>)"從深度值內減一。3、"(?(DEPTH)(?!))"保證在匹配最后一個右括號之前深度為零。它能工作的原因在于引擎的回逆堆棧保存了匹配成功的組的軌跡。"(?<DEPTH>)"不過是一個帶有名稱的分組構造,它將總是匹配成功(不匹配任何東西)。而由于它被緊接著放在"/("之后,它的成功匹配(仍然在堆棧上直到被移除)被用于左括號的計數。譯注:還有一種寫法是"(?<DEPTH>/()",我個人比較喜歡這種形式,而不是"/((?<DEPTH>)"。后面的"/)(?<-DEPTH>)"也是一樣。這樣,匹配成功了的名為"DEPTH"的分組的計數在回逆堆棧上被建立起來。而當找到右括號的時候我們還希望從深度值減一,這是由.NET特別的語法構造"(?<-DEPTH>)"實現的,它將從堆棧上移除最近匹配的"DEPTH"分組。如果堆棧上已經沒有記錄,"(?<-DEPTH>)"分組匹配失敗,從而防止了正則表達式系統匹配多余的右括號。最后,"(?(DEPTH)(?!))"是一個用于"(?!)"的斷言,如果"DEPTH"分組到目前為止還是成功的話。如果當我們匹配到這里時還是成功的,這里有個未配對的左括號還沒有被"(?<-DEPTH>)"移除。在這種情況,我們希望停止匹配(我們不希望匹配一個未配對的括號),所以我們使用"(?!)",它是一個“零寬度負預測先行斷言”,僅當子表達式不在此位置的右側匹配時才繼續匹配。這就是在.NET的正則表達式實現中匹配嵌套結構的方法。

以上內容似乎很難懂, 其實如果覺的難懂的話也簡單,那你就不要去理解,你只要能用就OK了,把() 替換成你要的字符,相信可以解決不少你的問題,

以下根據這個用法寫了個測試用例

  1. PRivatevoidbutton3_Click(objectsender,EventArgse)
  2. {
  3. Regexr=newRegex(@"/[(?>[^/[/]]+|/[(?<DEPTH>)|/](?<-DEPTH>))*(?(DEPTH)(?!))/]");
  4. StringBuildersb=newStringBuilder();
  5. MatchString("[111[222[333]]][222[333]][333]",r,sb);
  6. MessageBox.Show(sb.ToString(),"取到的信息");
  7. }
  8. privatevoidMatchString(stringOutString,Regexr,StringBuildersb)
  9. {
  10. MatchCollectionms=r.Matches(OutString);//獲取所有的匹配
  11. foreach(Matchminms)
  12. {
  13. if(m.Success)
  14. {
  15. sb.AppendLine(m.Groups[0].Value);
  16. MatchString(m.Groups[0].Value.Substring(1,m.Groups[0].Value.Length-1),r,sb);//去掉匹配到的頭和尾的"["和"]",避免陷入死循環遞歸中,導致溢出
  17. }
  18. }
  19. return;
  20. }

可以得到

[111[222[333]]] [222[333]] [333] [222[333]] [333] [333]


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
夜色77av精品影院| 亚洲国产欧美久久| 国产在线日韩在线| www.日韩视频| 激情懂色av一区av二区av| 欧美电影电视剧在线观看| 亚洲自拍欧美另类| 91美女片黄在线观| 亚洲国产精彩中文乱码av| 精品国产鲁一鲁一区二区张丽| 欧美老妇交乱视频| 精品久久香蕉国产线看观看gif| 国产日韩精品综合网站| 日韩网站免费观看| 国产精品美女无圣光视频| 97人洗澡人人免费公开视频碰碰碰| 91色视频在线导航| 国产精品私拍pans大尺度在线| 久热精品视频在线免费观看| 中文字幕久热精品在线视频| 中文国产亚洲喷潮| 国产精品一区二区电影| 中文字幕亚洲一区| 国产亚洲在线播放| 欧美激情在线观看视频| 国产色综合天天综合网| 欧美日在线观看| www.日韩.com| 久久久精品国产网站| 亚洲精品久久久久久久久久久久久| 日韩中文在线中文网在线观看| 亚洲男女自偷自拍图片另类| 国产欧美日韩亚洲精品| 97国产在线观看| 91国偷自产一区二区三区的观看方式| 日韩麻豆第一页| 久久久精品电影| 97在线观看视频国产| 日韩av手机在线观看| 亚洲午夜色婷婷在线| 尤物99国产成人精品视频| 亲爱的老师9免费观看全集电视剧| 精品视频在线播放| 97久久精品国产| 欧美日韩另类字幕中文| 久久99久久99精品中文字幕| 日韩av一区在线观看| 亚洲图片在区色| 欧美日韩一区二区在线播放| 欧美理论在线观看| 成人中心免费视频| 久久久久久久久久久久久久久久久久av| 欧美在线视频免费| 中文字幕在线看视频国产欧美| 97婷婷大伊香蕉精品视频| 欧美一区二区三区图| 高清一区二区三区四区五区| 亚洲欧美日韩精品久久奇米色影视| 国产日韩欧美夫妻视频在线观看| 日本欧美中文字幕| 国产精品丝袜白浆摸在线| 国产视频一区在线| 97久久精品人搡人人玩| 日韩在线播放视频| 成人午夜激情免费视频| 色悠悠久久88| 日韩美女在线观看| 88xx成人精品| 国产精品一区二区三区免费视频| 菠萝蜜影院一区二区免费| 成人免费观看49www在线观看| 一区二区三区亚洲| 欧美一乱一性一交一视频| 97在线观看免费高清| 久久免费少妇高潮久久精品99| 亚洲理论片在线观看| 欧美成人精品一区| 成人欧美一区二区三区黑人孕妇| 欧美与欧洲交xxxx免费观看| 国产中文字幕日韩| 久久99视频精品| 久久国产精品99国产精| 久久人人爽人人| 国产国产精品人在线视| 久久久免费精品| 国产精品一区av| 亚洲美女久久久| 日韩欧美极品在线观看| 亚洲最大福利网| 另类视频在线观看| 国产精品一区二区三| xvideos亚洲| 欧美成人激情视频| 九九热在线精品视频| 亚洲白虎美女被爆操| 亚洲最大福利网| 97高清免费视频| 国产丝袜一区二区三区免费视频| 国产视频精品va久久久久久| 亚洲网在线观看| 97精品在线观看| 北条麻妃一区二区在线观看| 国产97色在线|日韩| 最近2019中文字幕在线高清| 国产成人综合久久| 美女av一区二区三区| 成人国内精品久久久久一区| yellow中文字幕久久| 国产美女久久久| 亚洲网址你懂得| 国产精品一区二区电影| 92福利视频午夜1000合集在线观看| 日本亚洲欧美三级| www.欧美视频| 亚洲国产成人精品女人久久久| 成人亚洲综合色就1024| 午夜精品久久久久久99热软件| 亚洲片国产一区一级在线观看| 亚洲国产精品大全| 国产成人免费av| 激情亚洲一区二区三区四区| 欧美性理论片在线观看片免费| 亚洲最大福利视频网站| 久久久人成影片一区二区三区| 欧美在线视频导航| 亚洲成色www8888| 欧美午夜激情小视频| 亚洲免费av网址| 欧美精品做受xxx性少妇| 国产在线视频不卡| 久久亚洲综合国产精品99麻豆精品福利| 国产在线观看不卡| 97在线观看免费| 影音先锋欧美在线资源| 国内精品小视频在线观看| 欧美日韩福利电影| 日韩免费在线播放| 欧美精品少妇videofree| 日韩在线视频中文字幕| 日本欧美中文字幕| 久久久视频免费观看| 在线免费看av不卡| 91精品国产自产在线观看永久| 97不卡在线视频| 久久久久久久成人| 欧美性xxxx极品hd满灌| 欧美性猛交xxxx黑人猛交| 98午夜经典影视| 91国在线精品国内播放| 亚洲一区国产精品| 欧美激情第1页| 亚洲国产欧美久久| 欧美成人午夜激情在线| 国产精品丝袜高跟| 91精品视频专区| 韩剧1988在线观看免费完整版| 一区二区三区日韩在线| 久久艳片www.17c.com| 欧美日韩爱爱视频| 国产精品久久电影观看| 91po在线观看91精品国产性色| 日韩在线视频免费观看高清中文| 精品夜色国产国偷在线| 欧美性xxxxxx|