我正在编写一个正则表达式来验证在创建新表时定义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`),
也。无论如何我可以改进正则表达式不匹配上面的字符串吗?
答案 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?\)