У меня есть строка строки нескольких как следующее:
END IF;
EXECUTE IMMEDIATE ' CREATE INDEX #idx1
ON somename ( row_id,
something)';
IF v_sys_error 0 THEN
GOTO SQL_ERROR;
END IF;
Я хочу получить часть полужирным (значение, что все от ВЫПОЛНЯЕТСЯ НЕПОСРЕДСТВЕННЫЙ к следующей точке с запятой.
У меня есть следующий regex, но как я могу изменить его для работы с несколькими строками?
(EXECUTE).*;
(? M) делает регулярное выражение многострочным - позволяет использовать начало (^) и конец ($) строковых операторов:
/(?m)(EXECUTE).*?;/
(? S) - флаг dotall - делает регулярное выражение сопоставьте новые строки с. (точка) операторы:
/(?s)(EXECUTE).*?;/
В Groovy должно работать следующее.
def s = """
END IF;
EXECUTE IMMEDIATE ' CREATE INDEX #idx1
ON somename ( row_id,
something)';
IF v_sys_error <> 0 THEN
GOTO SQL_ERROR;
END IF;
"""
def expect = """
EXECUTE IMMEDIATE ' CREATE INDEX #idx1
ON somename ( row_id,
something)';
""".trim()
def exe = s =~ /(?ms)(EXECUTE.*?;)/
assert expect == exe[0][1]