【发布时间】:2020-04-24 13:57:41
【问题描述】:
我正在努力解决 PHP 中的正则表达式:
我有许多 SQL 查询。现在,我想在这些查询中提取变量名(列名)。它应该返回一个数组(preg_match_all())
由于查询相当简单,因此不需要完美的解决方案。我想检查的唯一条件如下:
- 返回任意长度的所有字符串 (a-zA-Z0-9)
- 从以下表达式之一开始:“WHERE”、“AND”、“OR”、“WHERE (”、“AND (”、“OR (”和
- 在以下表达式之一之前结束:“=”、“>”、“
- 所有这些表达式都应该不区分大小写。
我正在使用以下在线正则表达式测试器:https://www.phpliveregex.com/#tab-preg-match-all。但是,我得到的最接近的是这个,因为我不知道如何获得多个匹配项:
preg_match_all('/^[where|and|or|\(]* ([a-zA-Z0-1]*)[ |=|<|<=|>|>=|or|in]*.*$/', $input_lines, $output_array);
一些示例 SQL 查询:
SHOULD RETURN
WHERE var1=1 AND var2=1 => var1; var2
WHERE var2 IN (1, 2, 3) OR var3=2 => var2; var3
WHERE (var4 like '%test%' and var5 NOT LIKE '%test%') => var4; var5
WHERE VAR6 = 'test' AnD var7='test2' => VAR6; var7
【问题讨论】:
-
我会使用图书馆,而不是自己拼凑一些东西……code.google.com/archive/p/php-sql-parser
-
如果您可以访问数据库,有更好的方法来查询列名本身。
-
@Wimanicesir 不幸的是,我没有。
标签: php regex preg-match-all