用于在源代码中搜索的正则表达式(while循环)

时间:2017-04-13 13:21:02

标签: c regex

我想创建正则表达式,匹配while(true)循环,其中body未使用单词' argv '

示例1:

    while(true){ 
        for(int i = 0; i < argc; i++) printf("%s",argv[i]);
    }

argv 用于while循环体中 - reg ex 不匹配

示例2:

 while(true){ 
     for(int i = 0; i < 5; i++) printf("%d",i);
 }

argv 未在while循环体中使用 - reg ex 应匹配

直到现在我才有这个正则表达式:

while\s*\(\s*true\s*\)\s*\{ there_should_be_something \}

我不知道用there_should_be_something取代什么

非常感谢

1 个答案:

答案 0 :(得分:1)

以下是适用于上述示例的正则表达式:while\s*\(\s*true\s*\)\s*\{(([^}](?!argv))*)\}

说明:

  • while\s*匹配while,然后匹配零个或多个空格
  • \(\s*true\s*\)匹配(true)并容忍空格
  • \{...\}容忍大括号间的内容
  • 大括号内的内容基于:[^}]*,即大括号内不允许使用大括号。为了简单的正则表达式,这是一个限制。如果你想处理所有的大括号,我建议起诉一个真正的解析器。
  • 大括号内的这些内容与negative lookahead(?!argv)合并,这意味着argv之后没有任何内容。
  • 即。 [^}](?!argv)表示argv未跟随的任何非大括号字符。
  • 我们只是对其进行分组,并要求此论坛零次或多次:([^}](?!argv))*