Preg Match从PHP中的SQL获取表名
我正试图从我的sql文件中获取升级脚本的表名,但我有一些不正确的地方 我的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
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很高兴帮助你,我的朋友。谢谢你的投票。