我想在我的代码中搜索for循环条件中的所有for循环。我为此创建了regrex。
for?\(.*?;.*?;.*?\).*\s*for?\(.*?;.*?;.*?\)
这适用于以下代码:
for(int i=0; i<StartTags.length; i++){
for(int j=0; j<StartTags.length; j++){
但不适合
for(;;)
{
somecode;
for(;;)
{
someOtherCode;
}
}
我应该在regrex中添加什么才能使其正常工作?
我想放一些regrex而不是&#34; .*\s*
&#34;所以它会搜索多行。
for?\(.*?;.*?;.*?\).*\s*for?\(.*?;.*?;.*?\)
答案 0 :(得分:2)
首先,您可以将正则表达式简化为:
for?\(.*;.*;.*\).*\s*for?\(.*;.*;.*\)
你看&#34;。*&#34;表示:任何出现任何char。添加&#34;?&#34;意思是:至少一次。 任何时候一次......如上所述:没有意义。
但除此之外:我只是建议分开你的两个案例。
除此之外:您当前的模式寻找
正如您可能已经注意到自己 - 多行部分正常运行。您当前的模式已经很好地匹配两行。但当然它可以不匹配你的第二个例子。因为你的第二个代表
为了解释这一点,让我们来看看:
for?\(.*;.*;.*\).*\s*.*\s*for?\(.*;.*;.*\)
换句话说:对于构造之间的每个行,您需要一个 .*\s*
所以,对我来说
for?\(.*;.*;.*\).*\s*.*\s*.*\s*for?\(.*;.*;.*\)
匹配你的for循环结构。
这里的问题:如果&#34; somecode&#34;将是两行,你需要再次放另一个&#34;行内容匹配器&#34;进入正则表达式。
我试过
for?\(.*;.*;.*\)(.*\s*)*for?\(.*;.*;.*\)
但至少对我来说,这会导致日食崩溃。
(这并不令人惊讶,因为question明确表示&#34;计算&#34;,又名&#34;无限期&#34;结构不能用于正则表达式)