首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我想要一个正则表达式,它将验证java变量,中间只有一个逗号

我想要一个正则表达式,它将验证java变量,中间只有一个逗号
EN

Stack Overflow用户
提问于 2018-06-07 05:54:42
回答 1查看 45关注 0票数 0

我有一个正则表达式,我用它来验证字符串。

代码语言:javascript
复制
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变量之间使用一个逗号,并且不允许在第一列之前使用它。

例如,以下字符串应该不匹配,但它匹配:

代码语言:javascript
复制
String s2 = SELECT ,column1,,column2 GROUPBY column3 AS AliasName

此外,我还想更改它,以便SELECTGROUPBYAS可以是大写或小写。我知道我可以使用另一种|,但我更喜欢不同的方式。

EN

回答 1

Stack Overflow用户

发布于 2018-06-07 07:49:25

像这样试一下:

代码语言:javascript
复制
(?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]+))?

Code Sample

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

PS:您的查询看起来不完整。没有FROM部件吗?PPS:您可能希望研究不同的解决方案,因为正则表达式不能完全匹配和验证SQL语法。你可以尝试tokenize the query。或者,更好的做法是使用解析器。ANTLR有一些SQL grammar

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50730186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档