想要一个正则表达式来验证java变量,中间只有一个逗号吗

想要一个正则表达式来验证java变量,中间只有一个逗号吗,java,regex,validation,pattern-matching,Java,Regex,Validation,Pattern Matching,我有一个用于验证字符串的正则表达式 String s = SELECT column1,column2 GROUPBY column3 AS AliasName regex = ^SELECT\s+[[a-zA-Z_$][a-zA-Z_$0-9]*,*]+[a-zA-Z_$][a-zA-Z_$0-9]?\s+GROUPBY\s+[[a-zA-Z_$][a-zA-Z_$0-9]*,*]+[a-zA-Z_$][a-zA-Z_$0-9]?\s+AS\s+[a-zA-Z_$][a-zA-Z_$0-9]*

我有一个用于验证字符串的正则表达式

String s = SELECT column1,column2 GROUPBY column3 AS AliasName
regex = ^SELECT\s+[[a-zA-Z_$][a-zA-Z_$0-9]*,*]+[a-zA-Z_$][a-zA-Z_$0-9]?\s+GROUPBY\s+[[a-zA-Z_$][a-zA-Z_$0-9]*,*]+[a-zA-Z_$][a-zA-Z_$0-9]?\s+AS\s+[a-zA-Z_$][a-zA-Z_$0-9]*$
这个验证是有效的,但是我需要更改regex的帮助,这样它在每个Java变量之间只允许一个逗号,在第一列之前不允许

例如,以下字符串不应匹配,但确实匹配:

String s2 = SELECT ,column1,,column2 GROUPBY column3 AS AliasName
另外,我想更改它,使
选择
分组依据
,以及
AS
可以是大写或小写。我知道我可以使用另一种方法,但我更喜欢另一种方法。

这样试试:

(?i)^SELECT ([a-zA-Z_$][a-zA-Z_$0-9]+,)*([a-zA-Z_$][a-zA-Z_$0-9]+) (?:(GROUPBY) ([a-zA-Z_$][a-zA-Z_$0-9]+,)*([a-zA-Z_$][a-zA-Z_$0-9]+))?(?: AS ([a-zA-Z_$][a-zA-Z_$0-9]+))?

允许小写的最简单方法是使用内联修饰符
(?i)
将正则表达式切换为不区分大小写

PS:您的查询看起来不完整。没有来自零件的

PPS:由于正则表达式不能完全匹配和验证SQL语法,您可能需要研究不同的解决方案。你可以试试看。或者,更好的方法是使用解析器。ANTLR有一些。

如当前所示,这些字符串将导致编译器错误。