2012-04-30 54 views
0

我試圖找到一個巨大的COBOL文件,如果所有的「IF」具有相應的「END-IF」。 使用Visual Studio 2008,因爲我知道它有一個正則表達式功能的搜索工具。 (雖然,我知道讀傑夫·阿特伍德關於它的文章後,在Visual Studio中的正則表達式並不比真正的交易完全一樣的。)在VS2008 REGEX搜索堆棧溢出

無論如何,我想出了這個表達式:

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

這似乎溢出堆棧,相當不方便(見下圖)。 所以我想知道,如果這是在所有可能的VS做這種搜索? 如果是這樣,正則表達式會是什麼樣子?

- >我想知道,如果所有的 「如果」 有一個結束 「END-IF」

感謝。

stack overflow during regex search in VS2008

+1

StackOverflow中的堆棧溢出!這很諷刺))) – superM

+0

我也這麼認爲:) – Tom

回答

2

你在這裏什麼是試圖用正則表達式執行遞歸解析,一般那將讓你陷入困境的情況下。 當我閱讀它時(我認爲,我不熟悉Visual Studio在這裏使用的風格),你的正則表達式會嘗試匹配儘可能多的行,直到找到END-IF - 包括匹配另一個END-IF。 換言之,當與

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-IF,或者在段落結尾處標記未關閉的IF。