PHP正则表达式子串

时间:2016-04-05 15:09:49

标签: php regex substring

我有一个非常长的查询,里面有很多子查询(差不多有一千行)。

我想要做的是获取查询中使用的所有表的名称。因此,请参阅以下查询示例,以获得一个想法:

SQL查询

$sql = "SELECT
    ...,
    ...,
    (
        SELECT COUNT(t.id) AS t_count
        FROM _user_just_a_table_db_ jat
        WHERE ...
        AND ...
        AND ...
    ),
    ...,
    ...,
    ...
    FROM _user_main_table_db_ tbl
    LEFT JOIN _user_joining_table_db_ jt
    ON jt.id = tbl.jt_id
    WHERE ...
    AND ...
    AND tbl.id IN (
        SELECT at.id
        FROM _user_another_table_db_ at
        WHERE at.active = 'Y'
    )";

在这种特殊情况下,我希望得到arraystring,其结果如下:

just_a_table
main_table
joining_table
another_table

注释

  1. 请注意,表格的名称可以多次出现。您可能会或可能不会担心这一点,因为我可以在获得结果后arraystring轻松删除重复项。
  2. 您可能已经注意到,我想要获得的字符串列表始终介于_user__db_之间。

2 个答案:

答案 0 :(得分:2)

这应该有效

_user_(.*?)_db_

<强> http://localhost:yourport/someApp/#

PHP代码

$match = array();
$re = "/_user_(.*?)_db_/"; 
$str = "SELECT\n    ...,\n    ...,\n    (\n        SELECT COUNT(t.id) AS t_count\n        FROM _user_just_a_table_db_ jat\n        WHERE ...\n        AND ...\n        AND ...\n    ),\n    ...,\n    ...,\n    ...\n    FROM _user_main_table_db_ tbl\n    LEFT JOIN _user_joining_table_db_ jt\n    ON jt.id = tbl.jt_id\n    WHERE ...\n    AND ...\n    AND tbl.id IN (\n        SELECT at.id\n        FROM _user_another_table_db_ at\n        WHERE at.active = 'Y'\n    )\""; 

$res = preg_match_all($re, $str, $match);
print_r($match[1]);

<强> Regex Demo

答案 1 :(得分:0)

$pattern = '/_user_(.*)_db_/';
preg_match_all($pattern, $sql, $match);
var_dump($match[0]);