regex over multiple lines in Groovy

Omnipresent picture Omnipresent · Sep 1, 2009 · Viewed 23.1k times · Source

I have a multiple line string like following:

END IF;

EXECUTE IMMEDIATE ' CREATE INDEX #idx1
      ON somename ( row_id,
                           something)';
   IF v_sys_error  0 THEN
      GOTO SQL_ERROR;

   END IF;

I wish to capture the part in bold (meaning everything from EXECUTE IMMEDIATE to next semicolon.

I have the following regex but how can I change it to work with multiple lines?

(EXECUTE).*;

Answer

Nosrama picture Nosrama · Sep 1, 2009

(?m) makes the regex multiline - allows you to match beginning (^) and end ($) of string operators (in this case, to match the beginnings and ends of individual lines, rather than the whole string):

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

(?s) - dotall flag - makes the regex match newlines with . (dot) operators:

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