我想构建一个将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)也会出错。 如何制作一个正则表达式来替换我想要的任何序列?