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

标签 c regex

我想创建与 while(true) 循环匹配的正则表达式,其中主体不使用单词“argv

示例1:

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

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

示例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 替换什么

非常感谢

最佳答案

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

说明:

  • while\s* 匹配 while,然后是零个或多个空格
  • \(\s*true\s*\) 匹配 (true) 并允许空格
  • \{...\} 可以容忍大括号之间的内容
  • 大括号内的内容基于:[^}]*,即大括号内不允许有大括号。 这是一个限制,因为简单的正则表达式。如果您想处理所有大括号,我建议起诉真正的解析器。
  • 大括号内的内容与 negative lookahead 组合在一起: (?!argv) 表示后面不跟 argv 的任何内容。
  • [^}](?!argv) 表示后面没有 argv 的任何非大括号字符。
  • 我们只是将其分组并要求该组零次或多次:([^}](?!argv))*

关于c - 用于在源代码中搜索的正则表达式(while 循环),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43393477/

相关文章:

objective-c - 如何将生成的数组从 c 函数返回到 objective-c

通过 SMBus/I2C 更改带有 bcm2835 的 mlx90614 从机地址

regex - Haskell无法编译正则表达式代码

regex - 需要正则表达式来查找两个标记之间的子字符串

java - 如何将单词的指定最后一个字母匹配并替换为句子中的不同字母

javascript regex .match 在某个字符串处停止

c - 设置指向空段错误的指针

c - C 语言的 GPA 计算器不起作用。可能是类型转换错误

c - 如何用assert实现C宏

Java时间戳正则表达式