用于验证SQL的正则表达式

时间:2016-06-10 20:25:06

标签: java mysql regex

我正在编写一个正则表达式来验证在创建新表时定义INDEX,KEY和UNIQUE时应该给出一个名称。一些有效的语法是

KEY `id` (`id`),     
INDEX name (`name`),    
UNIQUE idx (`id`),     
UNIQUE KEY name (`name`),

语法无效

UNIQUE KEY (`name`),   
INDEX (`designation`),     
UNIQUE (`status`),    

因为在定义它们时没有提供名称。

我想出了像这样的正则表达式

  

(?: UNIQUE \ S + KEY | UNIQUE \ S + INDEX | KEY | INDEX | UNIQUE)(Ⅰ')?\ S *'\ W +'\ S * \(

但匹配

  

UNIQUE KEY(`name`),

也。无论如何我可以改进正则表达式不匹配上面的字符串吗?

1 个答案:

答案 0 :(得分:1)

你可以在第一个UNIQUE之后添加一个负向前瞻,这样它就会尝试第二个OR,然后只匹配UNIQUE KEY。

(?i)(?:INDEX|UNIQUE(?! KEY)|UNIQUE KEY|KEY)\s+\W?[\w ]+\W?\s+\(\W?[\w ]+\W?\)

反过来说,如果你想找到你指出无效的名字:

(?i)(?:INDEX|UNIQUE(?! KEY)|UNIQUE KEY|KEY)\s+\(\W?[\w ]+\W?\)