在c#中使用正規表示式進行匹配,有時候我們會遇到這種情況,cpu使用率100%,但是正規表示式並沒有異常丟擲,正則一直處於匹配過程中,這將導致系統資源被耗盡,應用程式被卡住,這是由於正則不完全匹配,而且regex中沒有timeout屬性,使正則處理器陷入了死迴圈。
這種情況尤其可能發生在對非可靠的被匹配物件的匹配過程中,例如在我的個人**http://www.eahan.com專案中,對多個**頁面的自動採集匹配,就經常發生該問題。為了避免資源耗盡的情況發生,我寫了乙個asynchronousregex類,顧名思義,非同步的regex。給該類乙個設定乙個timeout屬性,將regex匹配的動作置於單獨的執行緒中,asynchronousregex監控regex匹配超過timeout限定時銷毀執行緒。
using system;
using system.text.regularexpressions;
using system.threading;
namespace lzt.eahan.common
}public asynchronousregex(int timeout)
public matchcollection matchs(regex regex, string input)
private void sleep(thread t)
else}}
private void matchcompletehandler(matchcollection mc)
class reg
private string _input;
public string input
set
}private regex _regex;
public regex regex
set
}internal void matchs()}}
}}呼叫 asynchronousregex ar = new asynchronousregex(1000); //1000是設定1000為超時時限
matchcollection mc = ar.matchs(new regex(regular), input); //regular是正規表示式,inupt是要被匹配的字串
Python正規表示式關於匹配「 」
import re s t123 pattern t d o re.match pattern,s print o 輸出是 none 因為在pattern中,同樣作為了轉義,所以想要匹配兩個 就需要四個 pattern t d 這樣即可匹配成功 如果我們的字串s中有四個 呢?那麼我們在pattern...
關於正規表示式 匹配規則
基本模式匹配 一切從最基本的開始。模式,是正規表示式最基本的元素,它們是一組描述字串特徵的字元。模式可以很簡單,由普通的字串組成,也可以非常複雜,往往用特殊的字元表示乙個範圍內的字元 重複出現,或表示上下文。例如 once 這個模式包含乙個特殊的字元 表示該模式只匹配那些以once開頭的字串。例如該...
正規表示式 匹配
字串 void abtr quint32 ab 表示乙個正規表示式 template class bidirectionaliterator class allocator std allocator sub match bidirectionaliterator class match resul...