Чтобы прояснить возможное решение Чжонга, которое, я думаю, довольно умно: оно работает, но это зависит от кода, отформатированного очень специфическим способом. Но это нормально, потому что большинство IDE в любом случае могут применять определенный стандарт форматирования. Если я могу привести связанный пример - проблема, которая привела меня сюда - я искал выражения формы (на Java)
if (DEBUG) {
// possibly arbitrary statements or blocks
}
, что, да, технически не регулярно, но я запустил средство форматирования кода Eclispe для файлов, чтобы убедиться, что все они обязательно выглядят так (обычно предпочитаемый стиль кода нашей компании):
if (DEBUG) {
statement();
while (whatever) {
blahblahblah(etc);
}
// ...
}
и затем ищем это (это, конечно, синтаксис Java regex)
^(\s*)if \(DEBUG.*(?:\n\1 .*)*\n\1\}
сделал свое дело.