【问题标题】:want a regular expression which will validate java variables with only one comma in between想要一个正则表达式,它将验证 java 变量之间只有一个逗号
【发布时间】:2018-11-16 17:12:36
【问题描述】:

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

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 可以是大写或小写。我知道我可以使用替代 | 但我更喜欢不同的方式。

【问题讨论】:

  • 就目前而言,这些字符串会导致编译器错误。

标签: java regex validation pattern-matching


【解决方案1】:

试试这样:

(?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]+))?

Online Demo
Code Sample

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

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

【讨论】:

    猜你喜欢
    • 2022-11-25
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多