Вы можете попробовать что-то вроде следующего:
cat your_file.txt | grep 'instance-name-3' | awk '{print $3}'
При этом будет извлечен только IP-адрес (столбец 3) строки с именем instance-name-3
. :
Регулярные выражения могут соответствовать языкам, которые может проанализировать только конечный автомат, который очень ограничен, тогда как SQL является синтаксисом. можно продемонстрировать, что Вы не можете проверить SQL с regex. Так, можно прекратить пробовать.
SQL грамматика типа 2 , слишком способно быть описанным регулярными выражениями. Это - то же, как будто Вы решили генерировать код C# и затем проверить его, не вызывая компилятор. Механизм базы данных в целом слишком сложен, чтобы быть легко заблокированным.
Однако можно попробовать грамматики SQL ANTLR .
Насколько я знаю, что это вне regex и Вашего нахождения рядом с темными искусствами BnF и компиляторов.
То же самое происходит с людьми, которые хотят сделать выделение правильного синтаксиса. Вы запускаете вещи зубрежки в regex, и затем Вы заканчиваете тем, что писали компилятор...
Первое, что пришло на ум: разве Вы не могли передать сгенерированный SQL базе данных, и использование ОБЪЯСНЯЮТ на них и ловят какие-либо исключения, которые указали бы на плохо сформированный SQL?
Вы попробовали ленивые селекторы. Вместо того, чтобы соответствовать как можно больше, они соответствуют как можно меньше, которое является, вероятно, в чем Вы нуждаетесь для кавычек.
Для проверки запросов просто выполните их с , УСТАНАВЛИВАЕТ NOEXEC НА , именно так менеджер Entreprise делает это, когда Вы анализируете запрос, не выполняя его.
, Кроме того, при использовании regex для проверки запросов SQL, можно быть почти уверены, что Вы пропустите некоторые угловые случаи, или что запрос не допустим от других причин, даже если это синтаксически корректно.
Я предлагаю создать базу данных с той же схемой, возможно с помощью встроенного sql механизма, и передавая sql этому.
Я не думаю, что даже необходимо было создать схему, чтобы быть в состоянии проверить оператор, потому что система не попытается разрешить object_name и т.д., пока это успешно не проанализировало оператор.
С Oracle как пример, Вы, конечно, получили бы ошибку, если бы Вы сделали:
select * from non_existant_table;
В этом случае, "РТЫ 00942: таблица или представление не существуют".
Однако, если Вы выполняетесь:
select * frm non_existant_table;
Тогда Вы получите синтаксическую ошибку, "РТЫ 00923: ОТ ключевого слова, не найденного, где ожидается".
должно быть возможно классифицировать ошибки в ошибки анализа синтаксиса, которые указывают на неправильный синтаксис и ошибки, касающиеся имени таблиц и полномочий и т.д.
Добавляют к этому проблему различного RDBMSs и даже различных версий, позволяющих различные синтаксисы, и я думаю, что действительно необходимо перейти к механизму дб для этой задачи.
Существуют грамматики ANTLR для парсинга SQL. Это - действительно лучшая идея использовать в базе данных памяти или очень легкой базе данных такой как sqlite. Кажется расточительным мне протестировать, допустим ли SQL с точки зрения парсинга и намного более полезен проверить имена таблиц и имена столбцов и специфические особенности Вашего запроса.
Я предполагаю, что Вы сделали что-то как ".*" пробуют вместо этого" [^ "] *", который помешает Вам есть целую строку. Это все еще даст ложные положительные стороны на случаях, где Вы имеете \" в Ваших строках.