Я пытаюсь выяснить, как создать регулярное выражение, совпадающее со всем текстом между первым «BEGIN» и последним «END» блока процедуры.
Вот текст, который я хочу отфильтровать:
PROCEDURE MyFirstFunction()@12345
VAR
TESTVAR@1 : Record 1;
TESTVAR@2 : Record 2;
BEGIN
// Here begins the code
IF 1 = 1 THEN BEGIN
IF 2 <> 1 THEN BEGIN
MESSAGE('2 is not equal to 1');
END;
MESSAGE('1 is equal to 1');
END;
END;
PROCEDURE MySecondFunction()@123456
VAR
TESTVAR@1 : Record 1;
TESTVAR@2 : Record 2;
BEGIN
// Here begins the code
IF 1 = 1 THEN BEGIN
IF 2 <> 1 THEN BEGIN
MESSAGE('2 is not equal to 1');
END;
MESSAGE('1 is equal to 1');
END;
END;
PROCEDURE MyThirdFunction()@123457
VAR
TESTVAR@1 : Record 1;
TESTVAR@2 : Record 2;
BEGIN
// Here begins the code
IF 1 = 1 THEN BEGIN
IF 2 <> 1 THEN BEGIN
MESSAGE('2 is not equal to 1');
END;
MESSAGE('1 is equal to 1');
END;
END;
Я уже пробовал это с рекурсивным регулярным выражением, но это не сработало.
Вот регулярное выражение, над которым я работал:
BEGIN(((?!BEGIN|END;).)|(?R))*END;
Но я получаю только второе начало первой функции.
Вот ссылка на regex101.com для проверки регулярного выражения:
https://regex101.com/r/ZoBm6h/1