Preg Match从PHP中的SQL获取表名

Preg Match从PHP中的SQL获取表名,php,sql,regex,Php,Sql,Regex,我正试图从我的sql文件中获取升级脚本的表名,但我有一些不正确的地方 我的SQL文件中具有名称的行是创建表行: CREATE TABLE IF NOT EXISTS `ocx_category` ( 在preg\u match\u all语句中,我使用这个正则表达式: preg_match_all('#create\s*table\s*`(\w[\w\d]*)`#i', $sql, $table); CREATE TABLE.*`(\w+)` 但是所有的$table都以: array (s

我正试图从我的sql文件中获取升级脚本的表名,但我有一些不正确的地方

我的SQL文件中具有名称的行是创建表行:

CREATE TABLE IF NOT EXISTS `ocx_category` (
preg\u match\u all
语句中,我使用这个正则表达式:

preg_match_all('#create\s*table\s*`(\w[\w\d]*)`#i', $sql, $table);
CREATE TABLE.*`(\w+)`
但是所有的
$table
都以:

array (size=2)
  0 => 
    array (size=0)
      empty
  1 => 
    array (size=0)
      empty

我哪里弄错的?

您可以使用这个正则表达式:

preg_match_all('#create\s*table\s*`(\w[\w\d]*)`#i', $sql, $table);
CREATE TABLE.*`(\w+)`

顺便说一下,您的正则表达式是
(\w[\w\d]*)
您不需要
[\w\d]
,因为
\w
包括
\d
。所以,基本上我要做的是将正则表达式缩短为
\w+
,并在“createtable”之后包含所有字符串


后跟零个或多个空格字符(
\s*
),后跟反勾(
`
)。您不允许使用“如果不存在”部分。

您不需要同时使用
\w
\d
,因为
\w
匹配字母、数字和下划线。如果不存在,您的regexp不匹配
这里我们开始
预匹配所有('.\s*创建\s*表\s*如果\s*不存在,\s*存在
(\w+)
\i',$sql$table)非常有效谢谢你的帮助。@VinceKronlein很高兴帮助你,我的朋友。谢谢你的投票。