Java – regular expressions ignore new lines and match only the entire large string?
•
Java
I have this string here:
CREATE UNIQUE INDEX index555 ON SOME_TABLE ( SOME_PK ASC );
I want to match multiple lines and SQL statements (all of which will have a lot of 1 large string)... Like this, but I just get a match on create unique index index555 on
(CREATE\s.+;)
Note: if it's important, I'm trying to do this in Java
Solution
The dotall and multiline flags are required when compiling regular expressions This is a java code example:
import java.util.regex.*; public class test { public static void main(String[] args) { String s = "CREATE UNIQUE INDEX index555 ON\nSOME_TABLE\n(\n SOME_PK ASC\n);\nCREATE UNIQUE INDEX index666 ON\nOTHER_TABLE\n(\n OTHER_PK ASC\n);\n"; Pattern p = Pattern.compile("([^;]*?('.*?')?)*?;\\s*",Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE); Matcher m = p.matcher(s); while (m.find()) { System.out.println ("--- Statement ---"); System.out.println (m.group ()); } } }
The output will be:
--- Statement --- CREATE UNIQUE INDEX index555 ON SOME_TABLE ( SOME_PK ASC ); --- Statement --- CREATE UNIQUE INDEX index666 ON OTHER_TABLE ( OTHER_PK ASC );
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码