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);
}
这就像我想要匹配的东西。
解决方案
正如其他人所建议的那样,这不是正则表达式的合适任务;你应该使用解析器。
话虽如此,如果您必须使用正则表达式并且您只关心以您提供的确切格式\{ . \}
匹配 for 循环,您可以用类似的东西替换该部分以\{[\S\s]+\}
成功匹配正文。
这是完整的模式:
for\s*\((\w*\s+\w+\s*\=\s*\d+\s*)?\;(\s*\w+\s*\W+\d+\s*)?\;(\s*\w+\W+)?\)\s*\{[\S\s]+?\}
我对其进行了一些额外的更改。例如,在适当的情况下允许更多的空格并使第二组和第三组可选,因为每个初始化、条件和更新(增量/减量)在 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.
推荐阅读
- javascript - 如何在 JavaScript 中使用正则表达式搜索文件中的特殊字符串?
- python - 具有唯一字符的Python字符串?无效的语法
- php - BotMan 和 Symfony 5.1 - 在子目录中安装 botman
- ssl - 为 LetsEncrypt 创建超链接以在 Github 页面上提供 SSL 证书
- dialogflow-es - DialogFlow 训练短语
- html - HTML 截断部分
- android - 如何在firebase中获取具有特定属性值的文档列表?
- ios - 在 Swift 5 中使用范围创建结构数组时,“表达式类型不明确,没有更多上下文”
- swift - 如何在 SwiftUI 中创建带有外部对焦环的 macOS Big Sur 风格的搜索框?
- python - 在熊猫中,如何重新排列数据框以同时组合列组?