我经常搜索,无法找到检测到变量中的循环;
我有一个类似于"for(i=0;i<=1000;i++)"
的字符串,或者它可能是任何类型的for循环!
我想获得for loop
的第一部分:如for(i=0;
和1000
,如果给出数字,它会运行多少次。
我现在用来给我第一部分,但它并不完美:
str.replace(/for\(\w+=\w;/g,"something");
当我在中间放置一些空间时,它失败了!
使用regEx
??
答案 0 :(得分:3)
这有效:
\bfor\s*\([^;]+;.+\b(\d+)\b\s*;
这允许for和open-paren之间的空格,以及捕获组1(你想要的数字)和下面的分号之间的空格。
至于你如何“获得”你想要的数字:它在捕获组1中。我不知道你正在使用什么语言,但在Java中,你可以用以下内容检索它:
Matcher m = Pattern.
compile("\\bfor\\s*\\([^;]+;.+\\b(\\d+)\\b\\s*;").
matcher(theSourceCode);
int theNumberYouWant = -1;
if(m.find()) {
//Safe to translate to int, since the match guarantees it's a number
theNumberYouWant = Integer.parseInt(m.group(1));
}
如果您还需要在第一个分号之前捕获第一个数字,只需复制当前的捕获组。所以改变这个
\bfor\s*\([^;]+;.+\b(\d+)\b\s*;
到
\bfor\s*\(.+\b(\d+)\b\s*;.+\b(\d+)\b\s*;
现在第一个数字在捕获组1中,然后在捕获组2中第二个。