Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式子字符串_Php_Regex_Substring - Fatal编程技术网

PHP正则表达式子字符串

PHP正则表达式子字符串,php,regex,substring,Php,Regex,Substring,我有一个很长的查询,其中有很多子查询(将近一千行) 我要做的是获取查询中使用的所有表的名称。因此,以下面的查询示例为例,了解一下情况: SQL查询 在这种特殊情况下,我想得到一个数组或字符串,结果如下: just_a_table main_table joining_table another_table 笔记 请注意,表的名称可能会出现多次。您可能会担心,也可能不会担心,因为我可以在获得生成的数组或字符串后轻松删除重复项 正如您可能已经注意到的,我想要获取的字符串列表将始终处于\u user

我有一个很长的查询,其中有很多子查询(将近一千行)

我要做的是获取查询中使用的所有表的名称。因此,以下面的查询示例为例,了解一下情况:

SQL查询 在这种特殊情况下,我想得到一个
数组
字符串
,结果如下:

just_a_table
main_table
joining_table
another_table
笔记
  • 请注意,表的名称可能会出现多次。您可能会担心,也可能不会担心,因为我可以在获得生成的
    数组
    字符串
    后轻松删除重复项
  • 正如您可能已经注意到的,我想要获取的字符串列表将始终处于
    \u user\u
    \u db\u
    之间
  • 这应该行得通

    _user_(.*?)_db_
    

    PHP代码


    @rock321987
    (\u user.*?\u db\u)将获得完整的表名。@apokryfos查看一次正则表达式again@rock321987我正在使用你的正则表达式,但我得到一个错误,上面写着
    警告:preg_match():未知修饰符'('
    。这是我的代码:
    preg_match('''u user.*?'u db_/gm',$sql,$matches);
    @PatrickGregorio您缺少开头的正则表达式delimiter@chris85实际上,我是从
    regex101
    生成代码的。更新请详细说明此代码如何回答问题(此答案位于低质量帖子审阅队列中)。
    _user_(.*?)_db_
    
    $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]);
    
    $pattern = '/_user_(.*)_db_/';
    preg_match_all($pattern, $sql, $match);
    var_dump($match[0]);