Создание регулярного выражения для принятия различных условий одной и той же строки

Я работаю над заданием, которое требует написания Java-программы, которая делает эквивалент SQL-операций без использования расширенных библиотек. Поэтому она будет читать строку за строкой операций, например, из inputOps.sql.

CREATE TABLE student(id:integer, gpa:decimal, name:string, family:string,isMale:Boolean) 
INSERT INTO student(id,gpa,name,family,isMale) VALUES (50,null,”Ali”, “Hasani”, true)
SELECT id, name FROM student WHERE id=0 

Затем программа проанализирует каждую из этих строк, проверив наличие любых несоответствий или ошибок. Затем будет выполнена операция строки и, наконец, будет создан журнал в файле, подобном log.txt.

ERROR: Duplicate column name 
family Table student created
ERROR: Table student already exists 
ERROR: Invalid table name st 

будет третий файл, который функционирует как база данных. Я выбрал формат JSON для этой задачи, поэтому такие операции, как создание и вставка, сохранят массив JSON в файле JSON.

["student",["23","3.5","john","johnson","true"]]

одна из особенностей операции вставки заключается в том, что пользователю не нужно упоминать каждый столбец данных (id, gpa...), поэтому, если строка операции пользователя имеет вид:

INSERT INTO student(id,name,family,isMale) VALUES (10,”diane”, “derringer”, false)

Программа поймет, что пользователи не указали значение для gpa, и автоматически назначит значение null, так как это значение для массива JSON, который будет создан для операции вставки. для разбора входной строки я использую регулярное выражение, поэтому используйте этот код для разбора строки:

Pattern insertPattern = Pattern.compile("(.*)(INSERT)(INTO)(\\w+)(\\()(\\w+)(,)(\\w+)(,)(\\w+)(,)(\\w+)(,)(\\w+)(\\))(VALUES)(\\()(\\d+|null )(,)(\\d+|null)(,)(\\w+|null)(,)(\\w+|null)(,)(\\w+)(\\))(.*)", Pattern.CASE_INSENSITIVE);
Matcher matcher = insertPattern.matcher(inputLine);

затем с помощью matcher.group() я бы сделал 2 массива: typeArray для части (id,name и т. д.) и valueArray для значений. Затем программа проверит каждый объект typeArray, чтобы сопоставить его с одним из типов данных (name, gpa), и затем создаст допустимый массив JSON для вставленной строки.

и вот в чем проблема. шаблон, который я использую, сопоставляет только строку со всеми упомянутыми типами, и единственное решение, которое приходит мне в голову, - это создать различные шаблоны для линий разного типа (один для строки с тремя упомянутыми типами, один для 4 и т. Д.), Который не кажется умным, а также должен быть проблематичным, когда я хочу создать методы для классификации его ошибок.

Что я должен сделать для этой проблемы? Есть ли способ заставить регулярное выражение принять другие условия?

PS: Я довольно новичок в программировании.

0 ответов

Другие вопросы по тегам