使用正则表达式获取for循环中的终止符int

时间:2014-03-09 00:47:04

标签: regex

我经常搜索,无法找到检测到变量中的循环;

我有一个类似于"for(i=0;i<=1000;i++)"的字符串,或者它可能是任何类型的for循环!

我想获得for loop的第一部分:如for(i=0;1000,如果给出数字,它会运行多少次。

我现在用来给我第一部分,但它并不完美:

 str.replace(/for\(\w+=\w;/g,"something");
当我在中间放置一些空间时,它失败了!

使用regEx ??

是否只能获取for循环的部分

1 个答案:

答案 0 :(得分:3)

这有效:

\bfor\s*\([^;]+;.+\b(\d+)\b\s*;

Regular expression visualization

Debuggex Demo

这允许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中第二个。