【问题标题】:Preg Match to get Table Names from SQL in PHPPreg Match 从 PHP 中的 SQL 获取表名
【发布时间】:2014-08-26 20:44:07
【问题描述】:

我正在尝试从我的 sql 文件中获取表名以用于升级脚本,但我有一些不正确的地方。

我的 SQL 文件中具有名称的行是 CREATE TABLE 行:

CREATE TABLE IF NOT EXISTS `ocx_category` (

preg_match_all 语句中,我使用了这个正则表达式:

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

但所有$table 都以:

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

我哪里弄错了?

【问题讨论】:

  • 您不需要同时使用\w\d,因为\w 匹配字母、数字和下划线。
  • 您的正则表达式与IF NOT EXISTS 不匹配。

标签: php sql regex


【解决方案1】:

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

CREATE TABLE.*`(\w+)`

Working demo

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

【讨论】:

  • 我们开始preg_match_all('#create\s*table\s*if\s*not\s*exists\s*(\w+)#i', $sql, $table); 非常感谢您的帮助。
  • @VinceKronlein 很高兴帮助你,我的朋友。感谢您的勾选和支持。
【解决方案2】:
...table\s*`(\w[...
        ^^^^--incorrect

table 后跟零个或多个空格字符 (\s*) 后跟一个反引号 (`)。您不允许使用“IF NOT EXISTS”部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多