Найти с помощью регулярного выражения текст, где не встречалось слово
Например есть такой код
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;
А дальше уже использую в регулярном выражении эту метку. В конце можно удалить эту метку опять же с помощью регулярного выражения.