Regex SQLite自动增量正则表达式
我从SQLite获取create语句查询,如下所示:Regex SQLite自动增量正则表达式,regex,sqlite,Regex,Sqlite,我从SQLite获取create语句查询,如下所示: CREATE TABLE [users] ([id] INTEGER PRIMARY KEY AUTOINCREMENT, [username] VARCHAR, [password] VARCHAR, [default_project] VARCHAR) /\b\[?id\]?\s+INTEGER\s+PRIMARY\s+KEY\s+AUTOINCREMENT\b/Ui 通过使用创建 SELECT sql FROM sqlite_m
CREATE TABLE [users] ([id] INTEGER PRIMARY KEY AUTOINCREMENT, [username] VARCHAR, [password] VARCHAR, [default_project] VARCHAR)
/\b\[?id\]?\s+INTEGER\s+PRIMARY\s+KEY\s+AUTOINCREMENT\b/Ui
通过使用创建
SELECT sql FROM sqlite_master WHERE type = 'table' AND name = :table
使用如下正则表达式确定自动增量字段:
CREATE TABLE [users] ([id] INTEGER PRIMARY KEY AUTOINCREMENT, [username] VARCHAR, [password] VARCHAR, [default_project] VARCHAR)
/\b\[?id\]?\s+INTEGER\s+PRIMARY\s+KEY\s+AUTOINCREMENT\b/Ui
问题是有不同的可接受的方法来编写关键字,例如“id”
,“id”
,“id”
。此处显示
我想创建一个正则表达式,它可以显式地检查这些不同的变体……在其他人的帮助下,我做到了:
$pattern = "/\b\"(id)|(\"id\")|(\[id\])|(`id`)|('id')\"\s+INTEGER\s+PRIMARY\s+KEY\s+AUTOINCREMENT\b/Ui";
然而,这有两个问题…一个是,整数主键自动递增
不再被检查…并且,('id')
没有正确匹配…但是,如果我将其位置与('id')
…交换,它将工作,('id')
/(\"id\"|\[id\]|\'id\'|`id`|\\bid)\s+INTEGER\s+PRIMARY\s+KEY\s+AUTOINCREMENT/Ui
似乎按预期工作。
[id]
与[id]
不匹配,但只有i
和d
,您正在搜索的可能是:
$pattern = "/\s(\"[a-z]+\"|\[[a-z]+\]|'[a-z]+'|[a-z]+)\s+INTEGER\s+PRIMARY\s+KEY\s+AUTOINCREMENT/Ui";
使用[a-z]+
以便可以匹配任何字母字段名,然后在第一个匹配中找到它(还要注意,可能有一些rowid不使用自动增量
关键字:它们都有效,但都带有a)