Мне нужно регулярное выражение, способное понимать переменные и массивы и извлекать тип данных, имя переменной и размер массива (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
, но совпадение []
происходит только с последним регулярным выражением.