【发布时间】:2017-11-10 18:33:37
【问题描述】:
我对正则表达式真的很不好,但我拼命地试图从 SQL“创建表”语句中提取表名,我有这样的事情:
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`)
);
可能有多个创建表语句,我想获取每个语句的所有表名,我尝试使用这个正则表达式:
<?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。我在这里错过了什么?
【问题讨论】: