Создание регулярного выражения для принятия различных условий одной и той же строки
Я работаю над заданием, которое требует написания 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: Я довольно новичок в программировании.