亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

難題高分求解:正則式匹配無異常但是資源耗盡

難題高分求解:正則式匹配無異常但是資源耗盡

POPMUISE 2018-11-01 01:03:21
在c#中使用正則表達式進行匹配,有時候我們會遇到這種情況,cpu使用率100%, 但是正則表達式并沒有異常拋出,正則一直處于匹配過程中,這將導致系統資源被耗盡, 應用程序被卡住,這是由于正則不完全匹配,而且Regex中沒有Timeout屬性,使正則處 理器陷入了死循環。         public static Match GetMatchRigid(string input, string pattern, string find)         {             string _pattn = Regex.Escape(pattern);             _pattn = _pattn.Replace(@"\[變量]", @"[\s\S]*?");             if (Regex.Match(pattern.TrimEnd(), Regex.Escape(find) + "$", RegexOptions.Compiled).Success)                 _pattn = _pattn.Replace(@"\" + find, @"(? <TARGET>[\s\S]+)");             else                 _pattn = _pattn.Replace(@"\" + find, @"(? <TARGET>[\s\S]+?)");             Regex r = new Regex(_pattn, RegexOptions.IgnoreCase | RegexOptions.Compiled);             Match m = r.Match(input);             return m;         } 
查看完整描述

2 回答

?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

沒遇到過,難道是傳說中的回溯,幫不了你,頂你一下

查看完整回答
反對 回復 2018-11-05
?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

最好把樣本和設想結果也發出來供測試啊。

一般來說產生這種情況都是回溯所致,嘗試將[\s\S]+一類的表達式都用(?>   )裝起來,即(?>[\s\S]+),RegexOptions中可以增加一個僅捕獲命名組的選項。


查看完整回答
反對 回復 2018-11-05
  • 2 回答
  • 0 關注
  • 373 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號