使用 preg_match 从创建表语句中获取 SQL 表名



我对正则表达式真的很糟糕,但我拼命尝试从 SQL"create table" 语句中提取表名,我有这样的东西:

分贝.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`)
);

可能有多个创建表语句,我想获取每个语句的所有表名称,我尝试使用此正则表达式:

<?php
$sql = file_get_contents('db.sql');
preg_match('/creates+tables+`?w+`/i', $sql, $tables);
var_dump($tables);

它有点工作:

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

但是我希望在没有"创建表"部分的情况下返回匹配项,我阅读了有关向前和向后看的信息并尝试了以下方法:

<?php
$sql = file_get_contents('db.sql');
preg_match('/(?<=creates+tables+`?)(w+)(?=`?)/i', $sql, $tables);
var_dump($tables);

但我得到的只是null.我在这里错过了什么?

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

preg_match('/creates+tables+`?(w+)`/i', $sql, $tables);
var_dump($tables[1])

最新更新