Oracle SQL和PostgreSQL之间的可选正则表达式替换

时间:2018-07-25 11:03:43

标签: regex replace expression

我想构建一个将Oracle SQL转换为Postgresql的SQL解析器。我的问题是用可选值替换正则表达式。 (信息:在“序列”中,您不需要填写所有选项,有时有5个,有时是2个。)

    Searchregex for the sequence:
    CREATE\s+SEQUENCE\s+(["a-zA-Z0-9_$.]+)
    (\s+INCREMENT\s+([0-9]+)|())?
    (\s+MINVALUE\s+([0-9]+)|())?
    (\s+MAXVALUE\s+([0-9]+)|())?
    (\s+START\s+([0-9]+)|())?
    (\s+CACHE\s+([0-9]+)|())?
    (\s+CYCLE\s+|\s+NOCYCLE\s+|())?

我的问题是替换为可选值。

例如:

//PostgreSQL
CREATE SEQUENCE sq1 
INCREMENT 1 
START 2;

CREATE SEQUENCE sq2 
INCREMENT 1 
MAXVALUE 5 
START 2;

这两个序列是用PostgreSQL编写的。 PostgreSQL和Oracle SQL之间的区别很简单,只有两个词。 Oracle SQL语句必须如下所示:

//Oracle SQL
CREATE SEQUENCE sq1 
INCREMENT BY 1 
START 2;

CREATE SEQUENCE sq2 
INCREMENT BY 1 
MAXVALUE 5 
START WITH 2;

以下是JSON文件的一部分:

//JSON
{
        "name": "SEQUENCE",
        "alias": "SEQUENCE",
        "from": "CREATE \\s+SEQUENCE\\s+([\"a-zA-Z0-9_$.]+)
                 (\\s+INCREMENT\\s+([0-9]+)|())?
                 (\\s+MINVALUE\\s+([0-9]+)|())?
                 (\\s+MAXVALUE\\s+([0-9]+)|())?
                 (\\s+START\\s+([0-9]+)|())?
                 (\\s+CACHE\\s+([0-9]+)|())?
                 (\\s+CYCLE\\s+|\\s+NOCYCLE\\s+|())?"
        "to":  "CREATE\\s+SEQUENCE\\s+
                INCREMENT\\s+$3\\s+
                MINVALUE\\s+$6\\s+
                MAXVALUE\\s+$9\\s+
                START\\s+$12\\s+
                CACHE\\s+$15\\s+
                (CYCLE|NOCYCLE)"       
    }

问题是,我不知道“ to”语句的正确正则表达式。这个JSON-File ist就像我的程序替换规则。如果我这样做,它有时会起作用,但是在没有值时(例如maxvalue或sth)也会出错。 如何制作一个正则表达式来替换我想要的任何序列?

0 个答案:

没有答案