我有一个正则表达式,我用它来验证字符串。
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]*$
此验证有效,但我需要帮助更改正则表达式,以便它只允许在每个Java变量之间使用一个逗号,并且不允许在第一列之前使用它。
例如,以下字符串应该不匹配,但它匹配:
String s2 = SELECT ,column1,,column2 GROUPBY column3 AS AliasName
此外,我还想更改它,以便SELECT
、GROUPBY
和AS
可以是大写或小写。我知道我可以使用另一种|
,但我更喜欢不同的方式。
发布于 2018-06-07 07:49:25
像这样试一下:
(?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:您的查询看起来不完整。没有FROM
部件吗?PPS:您可能希望研究不同的解决方案,因为正则表达式不能完全匹配和验证SQL语法。你可以尝试tokenize the query。或者,更好的做法是使用解析器。ANTLR有一些SQL grammar。
https://stackoverflow.com/questions/50730186
复制相似问题