SQLite自动增量正则表达式

时间:2009-07-13 19:43:33

标签: regex sqlite

我正在从SQLite中获取创建语句查询,如下所示:

CREATE TABLE [users] ([id] INTEGER PRIMARY KEY AUTOINCREMENT, [username] VARCHAR, [password] VARCHAR, [default_project] VARCHAR) 

使用

创建
SELECT sql FROM sqlite_master WHERE type = 'table' AND name = :table

并使用如下正则表达式确定自动增量字段:

/\b\[?id\]?\s+INTEGER\s+PRIMARY\s+KEY\s+AUTOINCREMENT\b/Ui 

问题在于,有不同的可接受方式来撰写"id"`id`'id'等关键字。这里显示http://www.sqlite.org/lang_keywords.html

我想创建一个正则表达式,明确检查这些不同的变体......在其他人的帮助下我已经达到了这个目的:

$pattern = "/\b\"(id)|(\"id\")|(\[id\])|(`id`)|('id')\"\s+INTEGER\s+PRIMARY\s+KEY\s+AUTOINCREMENT\b/Ui";

然而,这有几个问题...一个是INTEGER PRIMARY KEY AUTOINCREMENT不再检查... ('id')没有正确匹配...但是如果我将它的位置与("id") ...交换比它的工作和("id")不会。

2 个答案:

答案 0 :(得分:0)

/(\"id\"|\[id\]|\'id\'|`id`|\\bid)\s+INTEGER\s+PRIMARY\s+KEY\s+AUTOINCREMENT/Ui

似乎按预期工作。

答案 1 :(得分:0)

[id][id]不匹配,但仅与id匹配,您要搜索的内容可能是:

$pattern = "/\s(\"[a-z]+\"|\[[a-z]+\]|'[a-z]+'|[a-z]+)\s+INTEGER\s+PRIMARY\s+KEY\s+AUTOINCREMENT/Ui";

使用[a-z]+,以便您可以匹配任何字母字段名称,然后在第一个匹配项中找到它(另请注意,可能存在不使用AUTOINCREMENT关键字的rowid:它们是两者都有效但有slightly different meaning)。