regex по нескольким строкам в Groovy

У меня есть строка строки нескольких как следующее:

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).*;
37
задан lospejos 3 September 2019 в 10:32
поделиться

2 ответа

(? M) делает регулярное выражение многострочным - позволяет использовать начало (^) и конец ($) строковых операторов:

/(?m)(EXECUTE).*?;/

(? S) - флаг dotall - делает регулярное выражение сопоставьте новые строки с. (точка) операторы:

/(?s)(EXECUTE).*?;/
61
ответ дан 27 November 2019 в 04:32
поделиться

В 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]
9
ответ дан 27 November 2019 в 04:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: