我试图在一个巨大的COBOL文件中找到所有“IF”都有相应的“END-IF”。 使用Visual Studio 2008,我知道它有一个带有正则表达式功能的搜索工具。 (虽然,我在阅读了Jeff Atwood关于它的文章之后知道,Visual Studio中的正则表达式与实际交易并不完全相同。)
无论如何,我想出了这个表达式:
<(IF)#(.*\n*)#END-IF\n
这似乎溢出了堆栈,非常不方便(见下图)。 所以我想知道,如果有可能在VS中进行这种搜索? 如果是的话,正则表达式会是什么样子?
- &gt;我想知道所有“IF”是否有结束“END-IF”
感谢。
答案 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。