我想创建与 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/