java - 想要一个正则表达式,它将验证 java 变量之间只有一个逗号
问题描述
我有一个用于验证字符串的正则表达式。
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
可以是大写或小写。我知道我可以使用另一种方式|
,但我更喜欢不同的方式。
解决方案
试试这样:
(?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]+))?
允许小写的最简单方法是使用 inline 修饰符将正则表达式切换为不区分大小写(?i)
。
PS:您的查询看起来不完整。没有FROM
部分?PPS:您可能需要研究不同的解决方案,因为正则表达式无法完全匹配和验证 SQL 语法。您可以尝试对查询进行标记。或者,更好的是,改用解析器。ANTLR 有一些SQL 语法。
推荐阅读
- python - `NoneType`-使用 BeautifulSoup 时出错
- c++ - 从 ui 文件中检索 Qwidget
- r - 基于每列中的观察数的子集数据框
- python-3.x - 在python中使用生成器计算频率
- c# - ASP.NET MVC 4 项目中不存在布局
- javascript - 应用方法未在 javascript 中返回完整的数组值
- php - 在 null 上调用成员函数 close()
- angular - 如何使用Angular 7在输入字段中设置值
- python - Zapier 编写的代码:Python - 如何使其返回错误
- javascript - const 是否像 let 一样创建本地范围?