2012-04-30 5 views
0

"IF"に対応する "END-IF"がある場合、巨大なCOBOLファイルを検索しようとしています。 私が知っているようにVisual Studio 2008を使うと、正規表現機能を備えた検索ツールがあります。 (。けれども、私は、Visual Studioで正規表現が本物よりもかなり同じではないこと、それについてのジェフ・アトウッドの記事を読んだ後知っている)VS2008でのREGEX検索のスタックオーバーフロー

とにかく、私はこの表現を思い付いた:

<(IF)#(.*\n*)#END-IF\n 

それはスタックをオーバーフローさせてしまい、かなり不都合です(下の図を参照)。 VSでこの種の検索を行うことが可能であれば、私は疑問に思っていましたか? それがあれば、正規表現はどのように見えますか?

- 閉鎖を持って "END-IF"

"IF">私はすべてかどうかを知りたいのおかげ。

stack overflow during regex search in VS2008

+1

StackOverflowのスタックオーバーフロー!これは皮肉です)))) – superM

+0

私もそう思った:) – Tom

答えて

2

あなたがここに持っていることは、正規表現で再帰的な解析を実行しようとしている、と一般的にそれがトラブルにあなたを得るために起こっている場合です。 私はこれを読んで(ここではVisual Studioで使用されているフレーバーに慣れていません)、正規表現はEND-IFを見つけるまで、できるだけ多くの行をマッチさせようとします。一致がない2見出される

IF condition-1 
    statement-1 
END-IF 
IF condition-2 
    statement-2 
END-IF 

いずれかで提示すなわち 、。また

、あなたがこのような場合に対処する方法を考える:

IF condition-1 
    IF condition-2 
     statement-1 
    END-IF 
END-IF 

あなたがあなた自身の言語の翻訳者やCOBOLの糸くずのツールを書こうとしている場合を除き、私はあなたが、コンパイラが見つけることを自分自身をコンテンツすることができると思いますあなたの一致END-IFs、またはパラグラフの終わりに閉じられていないIFにフラグを立てます。