Regex 从SQL架构中提取表名和列
我需要使用正则表达式从表模式(DDL)导出表名和列的帮助Regex 从SQL架构中提取表名和列,regex,Regex,我需要使用正则表达式从表模式(DDL)导出表名和列的帮助 创建表TODO( id整数不为空, 用户id整数不为空, 团队id整数不为空, 标题文本不为空默认为“Hello World!”, 说明文本不为空且唯一, 唯一(标题), 主键(id), 外键(用户id)引用用户(id), 外键(团队id)引用团队(团队id) 关于更新限制 关于删除限制 ) 表名 2.纵队 id // as group 1 (column name) INTEGER // as group 2 (col
创建表TODO(
id整数不为空,
用户id整数不为空,
团队id整数不为空,
标题文本不为空默认为“Hello World!”,
说明文本不为空且唯一,
唯一(标题),
主键(id),
外键(用户id)引用用户(id),
外键(团队id)引用团队(团队id)
关于更新限制
关于删除限制
)
2.纵队
id // as group 1 (column name)
INTEGER // as group 2 (column type)
NOT NULL // as group 3 (column nullable) empty if nothing
DEFAULT // as group 4 (default value for example "Hello World")
UNIQUE // as group 5 (column uniqueable) empty if nothing
- 注意:UNIQUE也可以在与
列相同的表级别上标题
3.主键
id // as group 1 (primary key)
- 表级别:
PRIMARY\sKEY\s+\([^\)]+\)
- 列级别:检查下面的答案
4.外键:
// first
user_id // as group 1 (foreign key)
users // as group 2 (reference table name)
id // as group 3 (reference primary)
// second
team_id // as group 1 (foreign key)
teams // as group 2 (reference table name)
t_id // as group 3 (reference primary)
ON UPDATE RESTRICT // as group 4
ON DELETE RESTRICT // as group 5
- 我在[github]()中找到了一个简单的正则表达式,但不支持
RESTRICT
/FOREIGN KEY\s+\(([^\)]+)\)\s+REFERENCES\s+([^\(^\s]+)\s*\(([^\)]+)\)/mi
CREATE\s+表\s+([\w\u]+)
\s+([\w\u]+)[\s\w]+,
\s*主\s+键\s+\([\w\]+)\)
\s*FOREIGN\s+KEY\s+\([\w\u]+\)\s+REFERENCES\s+([\w\u]+)\s+\([\w\u]+\)
您可以在此处(分别)进行测试:
正则表达式正在将结果返回到一个名为捕获组的
中,如果您在这里查看(?'GREOUP-name'..myregex…
,您可以找到该组的名称。它使您在完成正则表达式搜索后更容易引用它们,拆分它们也更容易
全面搜索
((?'COLUMN\u NAME'(?你能告诉我们你到目前为止都做了些什么吗?关于regex的警告是,我可能会很慢,这取决于你的搜索有多复杂,你使用什么regex引擎,以及你需要处理多少数据。我发现在C#中拆分字符串和检查关键字要快得多。谢谢兄弟,这很有魅力,但我现在使用的是V8引擎lookbehind
不受支持。谢谢@LlyaLysenko,效果很好。不幸的是,我还需要使用外键,我在github中找到了外键regex。检查上面的新编辑我已经添加了它,它也可以运行@ilya lysenko,但我的问题似乎遗漏了一些要点。(已编辑)
/FOREIGN KEY\s+\(([^\)]+)\)\s+REFERENCES\s+([^\(^\s]+)\s*\(([^\)]+)\)/mi
(?'TABLE_NAME'(?<=\bTABLE\s)(\w+))
(?'PRIMARY_KEY'(?<=PRIMARY\sKEY\s\()(\w+))
(?'COLUMN_NAME'(?<=^\s\s)([[:lower:]]\w+))