Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 从SQL架构中提取表名和列_Regex - Fatal编程技术网

Regex 从SQL架构中提取表名和列

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

我需要使用正则表达式从表模式(DDL)导出表名和列的帮助

创建表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+))