У меня есть файлы кода SQL, которые я хочу украсить, и у меня возникают проблемы с различием между тем, является ли определенная строка/часть кода строкой или комментарием.Дифференцируя строки SQL из комментариев
Мой текущий процесс я делаю шаблон поиска/Сличитель через файл и вытащить строки с регулярным выражением N?'([']{2}|[^'])*+'(?!')
и комментарии с \s*--.*?\n|/\*.*?\*/
, и поместить их в соответствующие массивы хранения данных, чтобы избежать их форматирования.
Примеры:
WHERE y = 'STRING'
->WHERE y = THIS_IS_A_STRING
и strings[0] = 'STRING'
SELECT x --do not format
->SELECT x THIS_IS_A_COMMENT
и comments[0] = --do not format
После украшая все, я потом пройти и искать THIS_IS_A_STRING
и THIS_IS_A_COMMENT
и восстановить их соответствующие значения из массивы.
Проблема, с которой я столкнулся, заключается в том, что в комментарии есть апостроф, или если в строке SQL есть двойные тире. Я могу исправить одну проблему, но она вызывает другую, в зависимости от того, хочу ли я сначала сохранить строки или комментарии.
Например:
--Don't format this
с сохранением строк, идущих первым будет соответствовать 'nt format this
всему пути до следующего '
, (из-за способности иметь многострочные строки).
С другой стороны, если я выбираю, чтобы сохранить комментарии первыми:
SELECT x FROM y WHERE z = '--THIS_IS_AS_STRING--'
, он обнаружит --
и не хранить все до следующего символа новой строки в массив комментариев.
Любая помощь будет очень признательна.
EDIT: Я знаю, что, вероятно, следует сделать это с помощью SQL синтаксического анализа, но я работаю над этим с главным регулярное выражение, и это последний шаг мне нужно заканчивая
Это задание для синтаксического анализатора SQL, а не регулярного выражения. – GriffeyDog