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