RegEx在VB中查找嵌套For循环

时间:2016-06-07 12:13:24

标签: regex

我正在寻找一个RegEx来在VBA / VB6模块中找到嵌套的For循环,例如:

For Loop1
   'enter code here

   For Loop2
       `enter code here
   Next
   'enter code here
Next

到目前为止,我有:

(?=For )(?s)(.*)(?=For )(?s)(.*)(?=Next )

可悲的是,表达式似乎同样很好地找到单个For Next循环作为嵌套For Next循环,更不用说具有多个(非嵌套)For Next循环的方法。

这让我大脑融化 - 请帮助。鉴于(?= For)在表达式中出现两次,我不明白如何找到单个For Next循环...

TIA

2 个答案:

答案 0 :(得分:1)

当所述内容可以在其中包含整个循环的实例时,正则表达式自身无法与/ content / next的完整匹配。但是,如果预先知道循环的最大深度,可以这样做。例如,使用此JavaScript代码,其中文件的内容位于名为file的变量中:

// remove the literals here so that the script doesn't get confused by them
// see some of my other answers for how to do this
var depth = file.match(/\bFor\b/g).length;
return new RegExp('(?:\\bFor\\b.*?){' + depth + '}(?:.*?\\bNext\\b){' + depth + '}');

那应该返回一个正则表达式来匹配file中的所有For / Next循环。这里不需要前瞻。

答案 1 :(得分:1)

由于它只能用于手动代码检查,假设有4个空格用于缩进,您可能需要尝试以下方法:

(\s*)For[^\r\n]*[\r\n]+(\s+([\r\n]+)|(\1    (?!For)[^\r\n]*[\r\n]+))+(\1    For)

这会在另一个For内找到For,演示:

https://regex101.com/r/lV8oZ0/1