我正在对C ++源代码进行一些语义分析。
我有一个正则表达式将数组声明从int [123] [1234]
转换为int [number] [number]
。
但我希望表达式也能够匹配这些维度
int [i * x][ring_size][w + 6]
。
如何告诉它匹配内部的任何内容(包括符号和空格)[]?
我的正则表达式如下:regex arrayDims("\\[[0-9]+\\]");
。我正在使用C ++ 11正则表达式标题。
谢谢
答案 0 :(得分:1)
如果您想匹配[]
内的任何内容,请尝试使用\\[.+?\\]
或类似内容。 ?
将*
变为非贪婪。在此页面上阅读更多内容。
编辑:我必须注意,虽然这对于表达式稍微复杂而不仅仅是数字,但如果表达式中有更多[]
,这将不起作用。
E.g。将我的模式应用于array[anotherarray[5]]
会产生[anotherarray[5]
,而不是[anotherarray[5]]
(请注意结尾处的额外括号)。
有关括号匹配的详情,请参阅this answer。
答案 1 :(得分:0)
如果要匹配像[w + 6]
这样的算术表达式,那么就不能使用正则表达式。算术表达式超出了正则表达式的强大功能。您必须使用某种无上下文解析器。