PHP(正则表达式):从 SQL-Query 中提取列名
PHP (regex): Extract column names from SQL-Query
我正在为 PHP 中的正则表达式苦苦挣扎:
我有很多 SQL 问题。现在,我想提取这些查询中的变量名(列名)。它应该 return 一个数组 (preg_match_all() )
由于查询比较简单,不需要完美的解决方案。我想检查的唯一条件如下:
- return 任何长度的所有字符串 (a-zA-Z0-9)
- 在下列表达式之一之后开始:"WHERE "、"AND "、"OR "、"WHERE ("、"AND ("、"OR (" 和
- 在下列表达式之一之前结束:“=”、“>”、“<”、"LIKE"、"NOT")
- 所有这些表达式都应该不区分大小写。
我正在使用以下在线正则表达式测试器: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
开始吧(当然不是100%完美):
(?:(?i)WHERE|AND|OR) \(?([a-zA-Z0-9]+)
我正在为 PHP 中的正则表达式苦苦挣扎:
我有很多 SQL 问题。现在,我想提取这些查询中的变量名(列名)。它应该 return 一个数组 (preg_match_all() )
由于查询比较简单,不需要完美的解决方案。我想检查的唯一条件如下:
- return 任何长度的所有字符串 (a-zA-Z0-9)
- 在下列表达式之一之后开始:"WHERE "、"AND "、"OR "、"WHERE ("、"AND ("、"OR (" 和
- 在下列表达式之一之前结束:“=”、“>”、“<”、"LIKE"、"NOT")
- 所有这些表达式都应该不区分大小写。
我正在使用以下在线正则表达式测试器: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
开始吧(当然不是100%完美):
(?:(?i)WHERE|AND|OR) \(?([a-zA-Z0-9]+)