Как и предполагали другие, это не подходящее задание для регулярных выражений; Вас
следует использовать парсер .
При этом, если вы должны использовать регулярные выражения и , вы только заботитесь о соответствии цикла 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 .
Я внес в него некоторые дополнительные изменения. Например, разрешено больше пробелов, где это необходимо, и 2-я и 3-я группы необязательны, , поскольку каждая из инициализации, условия и обновления (приращение / уменьшение) действительно являются необязательными в Java и соответствовать бесконечному циклу, а также. Не стесняйтесь сохранять или игнорировать эти изменения в зависимости от ваших требований.
Однако, , как я уже говорил выше, это фокусирует только на формате цикла 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.