2011-08-07 3 views
0

私はコーディングで奇妙な問題が発生したので、プロジェクトでcode highlight libraryを使用してSQLコードビューアをカスタマイズしようとしました。私はサンプルからサンプルフォームを取り出し、それをプロジェクトに入れ、起動時にフォームがハングアップしました。しかし、サンプルプロジェクトでは、ライブラリと同じサンプルが正常に動作します。 2つはWinformアプリケーションです。そしてfurthur調査は、コードは、ライブラリ自体ではなく、サンプルフォームで1つのアプリケーションでMatchCollectionハングアップを使用しますが、別のアプリケーションでは使用しません

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

ですが、非常に同じ場所で、私はサンプルWinフォームアプリケーションを実行したときにそれができるようにてきぱきと実行されるコードでハングアップすることを私に示してライブラリに付属しています。私は困惑している。私はRegexがアプリケーションを問わず同じものを実行する必要があると考えています。テキストは長すぎず、数百文字にすぎません。正規表現は同じです。私はサンプルフォームを抽出してそれを私のプロジェクトに入れて呼び出す以外は何もしませんでした。

誰かが私を助けたり正しい方向に向けることができますか? 「正規表現などの基本として」何かが実装でも同様に実行することになり

+0

別のテストアプリで同じ正規表現を同じテキストに適用するとどうなりますか? 「ハングアップ」とまったく同じ意味ですか?それはあなたのCPUを使い果たしますか? – svick

+0

サンプルコードは、同じ.NET Frameworkのバージョンを使用していますか? – NirMH

+0

また、あなたの正規表現(と大きすぎない場合はテキスト)を投稿してください。デバッガのコードをステップ実行しましたか?もしそうなら、それはいつハングしたのでしょうか?最初のループへのエントリー、またはマッチの1つに? –

答えて

1

あなたの仮定は、いくつかの理由で間違っている:

  • 正規表現はもう定期的ではありません。バックリファレンス、ルックアラウンド式、再帰的パターンマッチングなどの最新の追加機能は、数十年前の基本正規表現を大幅に拡張しました。
  • そこにはそれぞれdozens of regex flavorsがあり、それぞれ異なる機能のサブセットを実装しています。多くの場合、同じトークンをさまざまな方法で解釈します。あなたにとっては、JavaScript(クライアント側)と.NET(サーバー側)の正規表現の違いはおそらく最も関連性の高いものであり、少年は2つの異なるものです。
  • 正規表現がどのようにマッチするか(パフォーマンスに大きな影響を与える可能性があります)に影響を与える設定が可能な(ドットが改行と一致するかどうかなど)多くのパラメータがあり、これらのパラメータが正しく設定されていることを確認する必要があります。

おそらく、catastrophic backtrackingという問題が発生している可能性があります。ライブラリ自体の中に「ハング」することは、これによってしばしば引き起こされます。それが正しいかどうか、それを修正する方法を知るためには、あなたの正規表現、それを使って何をしようとしているのか、そして/または問題がある入力テキストのサンプルを見る必要があります。あなたの質問を編集し、その詳細を追加してください。

関連する問題