我对正则表达式真的很糟糕,但是我拼命想从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
。我在这里缺少什么?
答案 0 :(得分:1)
您需要做的就是捕获一个表名,用()
完成:
preg_match('/create\s+table\s+\`?(\w+)`/i', $sql, $tables);
var_dump($tables[1])