首页 > 解决方案 > 正则表达式匹配语句

问题描述

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

我尝试了以下正则表达式,但它不匹配任何内容:

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);  
} 

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

标签: regex

解决方案


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

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

这是完整的模式:

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

正则表达式 101 演示

我对其进行了一些额外的更改。例如,在适当的情况下允许更多的空格并使第二组和第三组可选,因为每个初始化、条件和更新(增量/减量)在 Java 中确实是可选的,并且也匹配无限循环。根据您的要求,随意保留或忽略这些更改。

但是,正如我上面所说,这关注问题中提供的 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.

推荐阅读