Найти с помощью регулярного выражения текст, где не встречалось слово

Например есть такой код

procedure Test1;
begin
  a := 1;
  b := 1;
end;

procedure Test2;
begin
  c := 1;
end;

procedure Test3;
begin
  
end;

Ищу регулярным выражением

(procedure Test1.*?\r\n)(.*?)([ ]*?\w+?[ ]+?:=.*?\r\n)(.*?)(end;)(.+?procedure Test3;.+?begin\r\n)(.+?end;)

И делаю замену

$1$2$4$5$6$3$7

В цикле выполняю это несколько раз При первом прогоне получаю

procedure Test1;
begin
  b := 1;
end;

procedure Test2;
begin
  c := 1;
end;

procedure Test3;
begin
  a := 1;    
end;

При втором прогоне получаю

procedure Test1;
begin
end;

procedure Test2;
begin
  c := 1;
end;

procedure Test3;
begin
  a := 1; 
  b := 1;
end;

И мне надо чтобы на этом все закончилось, но при третьем прогоне получаю

procedure Test1;
begin
end;

procedure Test2;
begin
end;

procedure Test3;
begin
  a := 1; 
  b := 1;
  c := 1;
end;

Как сделать так, чтобы регулярное выражение искало до первого end;?


Ответы (1 шт):

Автор решения: Олег Агнаев

Так и не нашел легкого решения, но использовал следующий вариант.

Перед тем как выполнять замену ставлю метку(комментарий) после нужного end. Получаю например это:

procedure Test1;
begin
  a := 1;
  b := 1;
end;//comment

procedure Test2;
begin
  c := 1;
end;

procedure Test3;
begin
  
end;

procedure Test3;
begin
  a := 1;    
end;

А дальше уже использую в регулярном выражении эту метку. В конце можно удалить эту метку опять же с помощью регулярного выражения.

→ Ссылка