Regex VS2008中正则表达式搜索中的堆栈溢出
我试图在一个巨大的COBOL文件中找到是否所有的“if”都有一个对应的“END-if”。 使用VisualStudio2008,我知道它有一个带有正则表达式功能的搜索工具。(不过,读了杰夫·阿特伍德(Jeff Atwood)的文章后,我知道Visual Studio中的正则表达式与真实交易并不完全相同。) 不管怎样,我想出了这个表达:Regex VS2008中正则表达式搜索中的堆栈溢出,regex,visual-studio,cobol,Regex,Visual Studio,Cobol,我试图在一个巨大的COBOL文件中找到是否所有的“if”都有一个对应的“END-if”。 使用VisualStudio2008,我知道它有一个带有正则表达式功能的搜索工具。(不过,读了杰夫·阿特伍德(Jeff Atwood)的文章后,我知道Visual Studio中的正则表达式与真实交易并不完全相同。) 不管怎样,我想出了这个表达: <(IF)#(.*\n*)#END-IF\n 我想知道是否所有的“如果”都有一个结束“如果结束” 谢谢 这里的例子是尝试使用正则表达式执行递归解析,通常这
<(IF)#(.*\n*)#END-IF\n
我想知道是否所有的“如果”都有一个结束“如果结束”
谢谢
这里的例子是尝试使用正则表达式执行递归解析,通常这会给您带来麻烦。
正如我所读到的(当然,我不熟悉这里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。StackOverflow中的Stack overflow!这很讽刺