2009-05-05 11 views
1

ASPNET_WP.EXEクラッシュマッチは、発見された例えば の.Net正規表現は、私は次のような問題を有し、これは私のネットワーカープロセス(Aspnet_wp.exe)がクラッシュし、なぜ誰もが見ることができるかどうかを疑問に思っています

<h3>Title</h3> 
<p>Top paragraph.</p> 

{{IF(1=2,,, <p></p>)}} 

しかし

私のCPUを爪とかなり長い間実行するように思わ一致が見つからない場合には、例えば、最後のブラケットは、最後の二つの巻き毛brakcets前に欠落している場合:

<h3>Title</h3> 
<p>Top paragraph.</p> 

{{IF(1=2,,, <p></p>}} 

永遠に検索するのはあまりにも貪欲ですか?ありがとう!

答えて

3

問題は容易に識別できます:"Catastrophic Backtracking"

"一致するものがあれば、一致するものがなければ、それは永遠に起こる"という現象が現れるたびに、それが原因だと確信できます。

バックトラックの少ない別の正規表現をお勧めします。 、

\{\{IF\(    # "{{IF(" 
(?>(?:(?!,,,).)+)  # atomic group: any char up to the ",,," 
,,,      # ",,," 
(?>(?:(?!\)\}\}).)+) # atomic group: any char up to the ")}}" 
\)\}\}     # ")}}" 
+0

+1素晴らしい記事を: -

Dim pattern As String = "\{\{IF\((?>(?:(?!,,,).)+),,,(?>(?:(?!\)\}\}).)+)\}\}" Dim mc As RegularExpressions.MatchCollection = Regex.Matches(txtContent.Text, pattern) 

パターン(あなたが合う括弧を追加し、私はあなたが必要なすべてをキャプチャするかどうかを知りません):Atomic groupingは最低でもバックトラックのステップを保つことができます – JaredPar

+0

ありがとうTomalak、私は今読んでよ! – stibstibstib

関連する問題