Ошибка пометки условного регулярного выражения в Ruby: недопустимый условный шаблон (SyntaxError) - PullRequest
0 голосов
/ 14 февраля 2019

Мне нужно регулярное выражение, способное понимать переменные и массивы и извлекать тип данных, имя переменной и размер массива (1D и 2D).

Пример строк:

first_string = "extern float variable;"
second_string = "extern uint8 array[5];"
thirds_string = "extern int16 map[10][4];"

Мое регулярное выражение в ruby ​​выглядит следующим образом:

@regex = /^extern\s+(\w+)\s+(\w+\d*)(?(\[(\d*)\])\[(\d*)\];|;).*$/i

Как я собираю данные:

# line is a string
type, name, first_idx, second_idx = line.scan(@regex).flatten

Что я ожидаю увидеть:

first_string -> type(float), name(variable), first_idx(nil or ''), second_idx(nil or '')
second_string -> type(uint8), name(array), first_idx(5), second_idx(nil or '')
third_string -> type(int16), name(map), first_idx(10), second_idx(4)

Первый раздел регулярного выражения работает отлично, но когда я добавляю условное выражение, чтобы найти [] с числами, я получаю ошибку.

Я также пытался использовать: /^extern\s+(\w+)\s+(\w+\d*)\[*(\d*)\]*\[*(\d*)\]*;.*$/i, но совпадение []происходит только с последним регулярным выражением.

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