我想创建正则表达式,匹配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取代什么
非常感谢
答案 0 :(得分:1)
以下是适用于上述示例的正则表达式:while\s*\(\s*true\s*\)\s*\{(([^}](?!argv))*)\}
说明:
while\s*
匹配while
,然后匹配零个或多个空格\(\s*true\s*\)
匹配(true)
并容忍空格\{...\}
容忍大括号间的内容[^}]*
,即大括号内不允许使用大括号。为了简单的正则表达式,这是一个限制。如果你想处理所有的大括号,我建议起诉一个真正的解析器。(?!argv)
合并,这意味着argv
之后没有任何内容。[^}](?!argv)
表示argv
未跟随的任何非大括号字符。([^}](?!argv))*