PHP (регулярное выражение): извлечение имен столбцов из SQL -Query - PullRequest
0 голосов
/ 24 апреля 2020

Я борюсь с регулярным выражением в PHP:

У меня есть ряд SQL -запросов. Теперь я хотел бы извлечь имена переменных (имена столбцов) в этих запросах. Он должен возвращать массив (preg_match_all ())

Поскольку запросы довольно просты, идеального решения не требуется. Единственные условия, которые я хотел бы проверить, следующие:

  • возвращает все строки (a-zA-Z0-9) любой длины, которые
  • начинаются сразу после одного из следующих выражения: «ГДЕ», «И», «ИЛИ», «ГДЕ (», «И (», «ИЛИ (» и
  • заканчиваются прямо перед одним из следующих выражений: "=", "> "," <"," LIKE "," NOT ") </li>
  • все эти выражения должны быть без учета регистра.

Я играл со следующим онлайн-тестером регулярных выражений: 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

1 Ответ

1 голос
/ 24 апреля 2020

Здесь мы go (конечно, не на 100% идеально):

(?:(?i)WHERE|AND|OR) \(?([a-zA-Z0-9]+)

См. демо на regex101.com.

...