我收到了一个包含超过20,000行的SQL
文件。 sql
由过程ddl和dml组成。我找到了一个更快的'分割文件的方法......
所以我想创建一个根据功能分割内容的脚本。以下是我的正则表达式:
String sp_regex = "(CREATE OR REPLACE PROCEDURE) .+(SHOW ERRORS;)$";
String insert_regex = "(INSERT INTO) .+(SHOW ERRORS;)$";
String delete_regex = "(DELETE FROM) .+([)];)$";
String table_regex = "(CREATE TABLE) .+([)];)$";
但是没有一个正则表达式工作。内容根本没有分裂。我的正则表达式有什么问题?
示例SQL:
CREATE OR REPLACE PROCEDURE "SCHEMA"."SP" (
......
);
/
SHOW ERRORS;
CREATE TABLE "SCHEMA"."TABLE" (
......
);
INSERT INTO "SCHEMA"."TABLE" ( ...... ) VALUES ( "......" );
DELETE FROM "SCHEMA"."TABLE" WHERE ..... = "....";
答案 0 :(得分:0)
您应该允许.
匹配换行符并允许$
匹配行结尾(而不仅仅是EOF)。如果你这样做,你还需要让+
量词懒惰,以告诉它在尽可能早的时候停止匹配:
String sp_regex = "(?sm)(CREATE OR REPLACE PROCEDURE) .+?(SHOW ERRORS;)$";
String insert_regex = "(?sm)(INSERT INTO) .+?(SHOW ERRORS;)$";
String delete_regex = "(?sm)(DELETE FROM) .+?([)];)$";
String table_regex = "(?sm)(CREATE TABLE) .+?([)];)$";
您需要彻底测试 - 与这些正则表达式不匹配的行将被忽略。