使用preg_match从create table语句中获取SQL表名

时间:2017-11-10 18:33:37

标签: php sql regex

我对正则表达式真的很糟糕,但是我拼命想从SQL“create table”语句中提取表名,我有这样的事情:

db.sql:

CREATE TABLE `users` (
  `user_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL
   PRIMARY KEY (`user_id`)
);

可能有多个create table语句,我想获取每个表的所有表名,我尝试使用这个正则表达式:

<?php

$sql = file_get_contents('db.sql');
preg_match('/create\s+table\s+\`?\w+`/i', $sql, $tables);
var_dump($tables);

有点有效:

array:1 [▼
  0 => "CREATE TABLE `ps_advbisn_subscription`"
]

但是我希望在没有“创建表”部分的情况下返回匹配,我读到了关于展望未来并尝试过这个:

<?php

$sql = file_get_contents('db.sql');
preg_match('/(?<=create\s+table\s+\`?)(\w+)(?=`?)/i', $sql, $tables);
var_dump($tables);

但我得到的只是null。我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

您需要做的就是捕获一个表名,用()完成:

preg_match('/create\s+table\s+\`?(\w+)`/i', $sql, $tables);
var_dump($tables[1])