Как разбить группу еще дальше, чем ниже? (Regex) - PullRequest
0 голосов
/ 10 февраля 2020

Я работаю над созданием таблицы с использованием выражения, сгенерированного в Regx.

У меня есть выражение:

TABLE \ s + GENERATOR \ s + ([az] \ w *) \ s * ((\ s * (?: [ аз] \ ш *) + \ s + (?: строка | число | логическое) \ s * (?: первичная) (?:? \ s * \ s * (: [аз] \ ш *) \ s + ( ?: string | integer | boolean) \ s * (?: primary)?) *))

Я проверяю это выражение, чтобы разделить этот оператор:

TABLE GENERATOR tableName (строка columnName, логическое первичное значение column2)

Выражение разбивает мой тестовый оператор на 2 группы:

  • Group1: tableName

  • Group2: columnName строка column2 логический первичный

Мне было интересно, есть ли способ разделить группу2 еще дальше или разделить группу на строковый массив или список?

Я пытался реализовать .split(), .toArray() и другие подобные методы для group2, чтобы попытаться разбить его, а также возиться с Regex, однако я занимался этим уже некоторое время и не могу похоже, найти жизнеспособное решение.

1 Ответ

1 голос
/ 10 февраля 2020

Я думаю, вы пытаетесь сделать слишком много за один go. Вы не создадите удобочитаемую программу, пытаясь поместить все это в одну строку. Для ваших столбцов spe c, может упростить регулярное выражение, чтобы просто искать вхождения всей группы, которая делает объявление вашего столбца:

[a-z]+ (bool|int)( primary)?

Будет соответствовать 3 раза:

x (cola bool, colb int, colc int primary)
   ^^^^^^^^^  ^^^^^^^^  ^^^^^^^^^^^^^^^^

Ваш движок регулярных выражений теперь будет иметь коллекцию совпадений из 3 совпадений (а не одно совпадение с 3 группами захвата), то есть все биты столбцов. при условии, что ваше объявление имени столбца, типа, модификаторов, запятой согласовано, вы должны использовать это для извлечения информации о вашем столбце. Вместо того, чтобы пытаться создать для этого одно массивное регулярное выражение, выберите простой, который будет постоянно повторять столбец spe c, как я это делал здесь, и запустите другое регулярное выражение, чтобы вытащить имя таблицы

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