2011-08-07 24 views
0

我剛剛在我的編碼生活中遇到了一個最奇怪的問題,我在一個試圖定製SQL代碼查看器的項目中使用了code highlight library。我從樣本中抽取了一個樣本表單,並將其放入項目中,並在啓動時掛起窗體。但是同樣的例子在圖書館附帶的示例項目中運行良好。這兩個都是Winform應用程序。而furthur調查顯示我的代碼掛在圖書館本身,而不是在樣品形式在一個應用程序中使用foreach而不是另一個應用程序

var matches = regex.Matches(text); 
foreach (Match m in matches) // Here it hangup 
{ 
    ... 
} 

但非常相同的點運行的瞬間,因爲它可以當我運行示例winform應用程序代碼附帶圖書館。我很困惑。我認爲像Regex這樣基本的東西無論在哪個應用程序中都應該執行相同的操作。文字不長,只有幾百個字符。正則表達式是一樣的。除了我提取樣本表單並將其放入我的項目並調用它之外,我沒有做任何其他的事情。

有人能幫助我還是指點我正確的方向?

+0

當你在單獨的測試應用程序中運行相同的正則表達式時,會發生什麼? 「掛斷」是什麼意思?它使用了你的CPU嗎? – svick

+0

是示例代碼使用相同的.NET框架版本? – NirMH

+0

也發佈你的正則表達式(和文本,如果它不是太大)。在調試器中執行了代碼嗎?如果是這樣,它什麼時候掛起 - 第一次進入循環或其中一場比賽? –

回答

1

你的那點事「基本爲正則表達式」將在不同的實現同樣進行假設是錯誤的,原因如下:

  • 正則表達式是不正規了。像反向引用,環視表達式,遞歸模式匹配等現代附加功能已經大大擴展了幾十年前的基本正則表達式。
  • 在那裏有dozens of regex flavors,每個實現不同的功能子集,許多解釋相同的令牌以不同的方式。對你來說,JavaScript(客戶端)和.NET(服務器端)正則表達式之間的區別可能是最相關的一個,而男孩,這兩個不同。
  • 有許多參數可以設置(比如點是否與換行符匹配),這些參數會影響正則表達式的匹配(並且可能會影響性能),並且您需要確保這些參數設置正確。

很可能,您遇到了一個叫做catastrophic backtracking的問題。圖書館內部的「懸掛」往往是由此造成的。要了解是否屬於這種情況以及如何糾正它,我們需要查看您的正則表達式,解釋您正在嘗試使用的正則表達式和/或您遇到問題的輸入文本樣本。請編輯您的問題並添加這些詳細信息。

相關問題