正则表达式匹配语句

时间:2019-04-05 09:27:42

标签: regex

对于一项大学任务,我需要用正则表达式匹配输入的循环,因此我想编写一个正则表达式来识别它。

我尝试使用正则表达式,但与任何内容都不匹配:

for\((\w*\s+\w+\s*\=\s*\d+\s*)?\;(\s*\w+\s*\W+\d+\s*)\;(\s*\w+\W+)\)\{ . \}

这是我使用的正则表达式。

for(int i=1;i<=10;i++){  
System.out.println(i);  
} 

这就是我想要匹配的东西。

1 个答案:

答案 0 :(得分:1)

  

正如其他人所建议的那样,这不是正则表达式的合适任务; 您   应该使用解析器

话虽如此,如果您必须使用正则表达式,则会关心以您提供的确切格式匹配for循环 > ,您可以用\{ . \}之类的东西来替换\{[\S\s]+\}部分,以便成功匹配主体。

这是完整的模式:

for\s*\((\w*\s+\w+\s*\=\s*\d+\s*)?\;(\s*\w+\s*\W+\d+\s*)?\;(\s*\w+\W+)?\)\s*\{[\S\s]+?\}

Regex101 demo

我对此做了一些其他更改。例如,在适当的情况下允许更多的空格,并使第二组和第三组为可选,因为每个初始化,条件和更新(递增/递减)are indeed optional in Java 并匹配无穷大循环以及。随时根据您的要求保留或忽略这些更改。

但是,正如我在上文所述,这将 only 集中于问题中提供的for循环的格式,并且将匹配就像我之前在评论中提到的那样,每种可能的方式都可以编写for循环。这些情况的一些示例:

// The update/increment may use a different operator.
for (int i = 1; i <= 10; i += 1) { }

// The condition can be any expression that evaluates to boolean.
for (int i = 1; i * 2 <= 10; i++) { }

// A for loop can have no braces.
for (int i = 1; i <= 10; i++)           
    System.out.println(i);

// Etc.