我想创建与 while(true( 循环匹配的正则表达式,其中没有使用正文单词 '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 应该与此匹配。
到目前为止,我只有这个正则表达式:
whiles*(s*trues*)s*{ there_should_be_something }
我不知道用there_should_be_something替换什么
多谢
下面是一个适用于上述示例的正则表达式: whiles*(s*trues*)s*{(([^}](?!argv))*)}
解释:
-
whiles*
匹配while
,则零个或多个空格 -
(s*trues*)
匹配(true)
并容忍空格 -
{...}
容忍牙套之间的东西 - 牙套内的东西是基于这个:
[^}]*
,即牙套内不允许有牙套。为了简单正则表达式,这是一个限制。如果你想处理所有的牙套,我建议起诉一个真正的解析器。 - 大括号内的这些东西与负面的展望相结合:
(?!argv)
这意味着任何没有跟随argv
的东西。 - 即
[^}](?!argv)
表示任何不后跟argv
的非大括号字符。 - 我们只是将其分组并要求该组零次或多次:
([^}](?!argv))*