我需要一个能够理解变量和数组并提取数据类型,变量名称和数组大小(一维和二维大小)的正则表达式。
字符串示例:
first_string = "extern float variable;"
second_string = "extern uint8 array[5];"
thirds_string = "extern int16 map[10][4];"
我的红宝石正则表达式如下:
@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
,但是[]
的匹配仅在最后一个正则表达式中发生。