将单个文件拆分为多个文件

时间:2015-01-21 11:38:39

标签: java regex

我收到了一个包含超过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 ..... = "....";

1 个答案:

答案 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) .+?([)];)$";

您需要彻底测试 - 与这些正则表达式不匹配的行将被忽略。