Java 正则表达式匹配除注释之外的所有内容

Java 正则表达式匹配除注释之外的所有内容,java,regex,Java,Regex,考虑到PSQL语句的Java正则表达式代码,我在尝试匹配语句中的注释之外的所有内容时遇到了一些问题。 这并不是要获得包含注释的行 ^(?!.*?(?:-- [a-z]*-[a-z]*: [a-zA-z]*)).*$ 这是PSQL: CREATE TABLE "test_table" ( "user_id" serial PRIMARY KEY, "username" VARCHAR (50) UNIQUE NOT NULL, -- foreign-key: t_supply_typ

考虑到PSQL语句的Java正则表达式代码,我在尝试匹配语句中的注释之外的所有内容时遇到了一些问题。 这并不是要获得包含注释的行

^(?!.*?(?:-- [a-z]*-[a-z]*: [a-zA-z]*)).*$
这是PSQL:

CREATE TABLE "test_table" (
   "user_id" serial PRIMARY KEY,
   "username" VARCHAR (50) UNIQUE NOT NULL, -- foreign-key: t_supply_type
   "password" VARCHAR (50) NOT NULL,
   "email" VARCHAR (355) UNIQUE NOT NULL, -- foreign-key: t_supply_type
   "created_on" TIMESTAMP NOT NULL,
   "last_login" TIMESTAMP
);

我遗漏了什么?

一个简单的方法是删除所有出现的
--
,直到行尾。考虑:

String line = "\"username\" VARCHAR (50) UNIQUE NOT NULL, -- foreign-key: t_supply_type";
line = line.replaceAll("\\s*--.*$", "");
System.out.println(line);
这张照片是:

"username" VARCHAR (50) UNIQUE NOT NULL,

假设您已经将整个SQL查询读入一个字符串,上述替换也应该仍然有效。

一般来说,您需要一个解析器,而不是正则表达式来完成这类工作。正则表达式不会解决这个问题。哦,嗯,我想我可以考虑为它制作一个PSQL查询解析器。