在VS2008中的REGEX搜索中堆栈溢出

时间:2012-04-30 13:24:15

标签: regex visual-studio cobol

我试图在一个巨大的COBOL文件中找到所有“IF”都有相应的“END-IF”。 使用Visual Studio 2008,我知道它有一个带有正则表达式功能的搜索工具。 (虽然,我在阅读了Jeff Atwood关于它的文章之后知道,Visual Studio中的正则表达式与实际交易并不完全相同。)

无论如何,我想出了这个表达式:

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

这似乎溢出了堆栈,非常不方便(见下图)。 所以我想知道,如果有可能在VS中进行这种搜索? 如果是的话,正则表达式会是什么样子?

  

- &gt;我想知道所有“IF”是否有结束“END-IF”

感谢。

stack overflow during regex search in VS2008

1 个答案:

答案 0 :(得分: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 lint工具,否则我认为您可以满足于编译器将找到匹配的END-IF,或在段落末尾标记未关闭的IF。