对于一项大学任务,我需要用正则表达式匹配输入的循环,因此我想编写一个正则表达式来识别它。
我尝试使用正则表达式,但与任何内容都不匹配:
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);
}
这就是我想要匹配的东西。
答案 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]+?\}
我对此做了一些其他更改。例如,在适当的情况下允许更多的空格,并使第二组和第三组为可选,因为每个初始化,条件和更新(递增/递减)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.