在PHP中使用正则表达式获取SQL查询的SELECT块

在PHP中使用正则表达式获取SQL查询的SELECT块,php,regex,Php,Regex,我想得到SQL查询的SELECT块,我想得到的是SELECT和FROM之间的文本。我应该用什么正则表达式 是否可以以相同的方式提取FROM、WHERE和JOIN块 更新 我不能使用,因为它是为MySQL构建的,我的MSSQL查询破坏了它。我已经搜索了很多MSSQL解析器,但找不到现成的解决方案,所以我能想到的唯一方法就是自己使用正则表达式解析SQL,并遵循select块位于select和FROM关键字之间的原则 示例 用于查询 SELECT STRAIGHT_JOIN a,b,c FROM s

我想得到SQL查询的SELECT块,我想得到的是SELECT和FROM之间的文本。我应该用什么正则表达式

是否可以以相同的方式提取FROM、WHERE和JOIN块

更新

我不能使用,因为它是为MySQL构建的,我的MSSQL查询破坏了它。我已经搜索了很多MSSQL解析器,但找不到现成的解决方案,所以我能想到的唯一方法就是自己使用正则表达式解析SQL,并遵循select块位于select和FROM关键字之间的原则

示例

用于查询

SELECT STRAIGHT_JOIN a,b,c 
FROM some_table an_alias
WHERE d > 5;
我希望这样的东西能被退回:

$result['SELECT'] => 'STRAIGHT_JOIN a,b,c';
$result['FROM'] => 'some_table an_alias';
$result['WHERE'] => 'd>5';

请查看此链接:


请查看此链接:

威尔·普罗库德:

[0] => Array
    (
        [0] => SELECT STRAIGHT_JOIN a,b,c FROM some_table an_alias WHERE d > 5;
    )

[1] => Array
    (
        [0] =>  STRAIGHT_JOIN a,b,c 
    )

[2] => Array
    (
        [0] =>  some_table an_alias 
    )

[3] => Array
    (
        [0] => 
    )

[4] => Array
    (
        [0] =>  d > 5;
    )
威尔·普罗库德:

[0] => Array
    (
        [0] => SELECT STRAIGHT_JOIN a,b,c FROM some_table an_alias WHERE d > 5;
    )

[1] => Array
    (
        [0] =>  STRAIGHT_JOIN a,b,c 
    )

[2] => Array
    (
        [0] =>  some_table an_alias 
    )

[3] => Array
    (
        [0] => 
    )

[4] => Array
    (
        [0] =>  d > 5;
    )

您可以使用SQL解析器库来完成这项工作

签出此项目

样本输入:

SELECT STRAIGHT_JOIN a,b,c 
  from some_table an_alias
 WHERE d > 5;
样本输出:

Array
( 
[OPTIONS] => Array
    (
        [0] => STRAIGHT_JOIN
    )       

[SELECT] => Array
    (
        [0] => Array
            (
                [expr_type] => colref
                [base_expr] => a
                [sub_tree] => 
                [alias] => `a`
            )

        [1] => Array
            (
                [expr_type] => colref
                [base_expr] => b
                [sub_tree] => 
                [alias] => `b`
            )

        [2] => Array
            (
                [expr_type] => colref
                [base_expr] => c
                [sub_tree] => 
                [alias] => `c`
            )

    )

[FROM] => Array
    (
        [0] => Array
            (
                [table] => some_table
                [alias] => an_alias
                [join_type] => JOIN
                [ref_type] => 
                [ref_clause] => 
                [base_expr] => 
                [sub_tree] => 
            )

    )

[WHERE] => Array
    (
        [0] => Array
            (
                [expr_type] => colref
                [base_expr] => d
                [sub_tree] => 
            )

        [1] => Array
            (
                [expr_type] => operator
                [base_expr] => >
                [sub_tree] => 
            )

        [2] => Array
            (
                [expr_type] => const
                [base_expr] => 5
                [sub_tree] => 
            )

    )

)

您可以使用SQL解析器库来完成这项工作

签出此项目

样本输入:

SELECT STRAIGHT_JOIN a,b,c 
  from some_table an_alias
 WHERE d > 5;
样本输出:

Array
( 
[OPTIONS] => Array
    (
        [0] => STRAIGHT_JOIN
    )       

[SELECT] => Array
    (
        [0] => Array
            (
                [expr_type] => colref
                [base_expr] => a
                [sub_tree] => 
                [alias] => `a`
            )

        [1] => Array
            (
                [expr_type] => colref
                [base_expr] => b
                [sub_tree] => 
                [alias] => `b`
            )

        [2] => Array
            (
                [expr_type] => colref
                [base_expr] => c
                [sub_tree] => 
                [alias] => `c`
            )

    )

[FROM] => Array
    (
        [0] => Array
            (
                [table] => some_table
                [alias] => an_alias
                [join_type] => JOIN
                [ref_type] => 
                [ref_clause] => 
                [base_expr] => 
                [sub_tree] => 
            )

    )

[WHERE] => Array
    (
        [0] => Array
            (
                [expr_type] => colref
                [base_expr] => d
                [sub_tree] => 
            )

        [1] => Array
            (
                [expr_type] => operator
                [base_expr] => >
                [sub_tree] => 
            )

        [2] => Array
            (
                [expr_type] => const
                [base_expr] => 5
                [sub_tree] => 
            )

    )

)

不清楚您想要什么,请添加一个示例。不清楚您想要什么,请添加一个示例。我无法使用此解析器的唯一原因是它针对MySQL进行了优化,并且我的查询是MSSQL,结果被破坏了…我认为php sql解析器应该支持以某种方式配置为其他sql方言:
如果使用其他数据库方言,那么您可能需要更改保留字-请参阅parsermanal
我不能使用此解析器的唯一原因是,它针对MySQL进行了优化,并且我的查询是MSSQL,结果被破坏了……我认为php sql解析器应该以某种方式为其他sql方言配置支持:
如果使用其他数据库方言,那么您可能需要更改保留字-请参阅ParserManual
,这看起来是朝着正确方向迈出的一步。我尝试了preg_match_all(“/SELECT(+?)FROM(+?)(?:JOIN(+?)*其中(+++)/I“,$sql,$arr);印刷费($arr);但是得到了一些空数组…这看起来是朝着正确方向迈出的一步。我尝试了preg_match_all(“/SELECT(+?)FROM(+?)(?:JOIN(+?)*其中(+++)/I“,$sql,$arr);印刷费($arr);但是得到了一些空数组。。。