Regex для извлечения информации из SQL-запроса - PullRequest
1 голос
/ 25 августа 2010

Поскольку я новичок в REGEX, я не могу решить следующую вещь.

И, пожалуйста, поделитесь ссылками, связанными с парсером, чтобы я мог его изучить.

Я столкнулся с проблемой при решении int ниже оператора SQL. Его дополнительная строка добавлена ​​к предыдущему входу.

Пожалуйста, помогите мне решить эту проблему.

DECLARE
numerator   NUMBER;
BEGIN
SELECT x, y INTO numerator, denominator FROM result_table, s_Table
WHERE sample_id = 8;
the_ratio := numerator/denominator;
IF the_ratio > lower_limit THEN
INSERT INTO 
ratio VALUES (table, coloum);
ELSE
INSERT INTO onemoreTable VALUES (table, -1);
END IF;
COMMIT;
delete from     --some comment
xyz where id=17;
EXCEPTION
WHEN ZERO_DIVIDE THEN
INSERT INTO ratio VALUES (table, 0);
COMMIT;
WHEN OTHERS THEN
ROLLBACK;
END;

ВЫВОД:

SELECT from: result_table, s_Table
INSERT into: ratio
INSERT into: onemoreTable
DELETE from: xyz
INSERT into: ratio

1 Ответ

1 голос
/ 25 августа 2010

Вот решение на основе Perl с использованием регулярных выражений:

$input =~s/--.*?\n//g; # delete the comments.
$input =~s/\s+/ /g; # replace multiple white space with single space.
while($input=~m/((?:insert into)|(?:delete from)) (\w+)/ig) { 
        print "$1 : $2\n";    
}

Правильный способ синтаксического анализа SQL - это использовать синтаксический анализатор и не использовать регулярные выражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...