Я пытаюсь сопоставить переменную PHP в запросе MySQL, но по какой-то причине я все еще собираю конечную кавычку ("
), которая завершает запрос. Проблема в том, что я не могу просто исключить кавычки, потому что мне нужно разрешить массивы.
Регулярное выражение: /(?:where)?.*[.| ](?<phrase>(?<col>[a-z_]+).*?(?<opp>=|in)[\s(]*?["'\s.{]+(?<var>\$[^\s;}]+)["'\s.]*)(?<end>.*)/i
Строка: $sql = "SELECT name FROM user WHERE id = $uuid";
Желаемое совпадение:
- «фраза» -
id = $uuid
(фактическое совпадение: id = $uuid"
)
- "col" -
id
- "OPP" -
=
- "var" -
$uuid
(фактическое совпадение: $uuid"
)
- "конец" -
";
(фактическое совпадение: ;
)
Regex 101
Я включил в ссылку массив, чтобы показать, что я имею в виду. И этот соответствует правильно. Но я не могу понять, как сопоставить запрос $uuid
, не нарушая запрос array
. Проблема, с которой я сталкиваюсь, заключается в том, что все, что исправляет запрос $uuid
, перемещает совпадение в запросе array
с $_REQUEST["user-id"]
на $_REQUEST["user-id
.
Есть ли способ указать регулярному выражению, что оно не соответствует закрывающей кавычке (если она существует), если оно не является частью параметра массива?
Как можно лучше понять, мне нужно, чтобы группа <end>
имела приоритет над группой <phrase>
при сопоставлении кавычек, но я не могу понять, как.