用于解析c++中数组索引表达式的正则表达式

Regular expression for parsing array indexing expressions in C++

本文关键字:索引 表达式 正则表达式 数组 c++ 用于      更新时间:2023-10-16

我正在对c++源代码做一些语义分析。我有一个正则表达式来将数组声明从int [123] [1234]转换为int [number] [number]

但是我希望表达式也能够匹配这些维度int [i * x][ring_size][w + 6]

我如何告诉它匹配里面的任何东西(包括符号和空格)[]?

我的正则表达式是:regex arrayDims("\[[0-9]+\]");。我使用c++ 11正则表达式头。

谢谢

如果您想匹配[]中的任何内容,那么尝试使用\[.+?\]或类似的内容。?*变成非贪婪的。阅读此页。

编辑:我必须注意到,虽然这适用于稍微复杂的表达式,而不仅仅是数字,如果表达式内有更多的[],这将不起作用。

。将我的模式应用于array[anotherarray[5]],结果是[anotherarray[5],而不是[anotherarray[5]](注意末尾的额外括号)。

如果您想匹配像[w + 6]这样的算术表达式,那么您不能使用正则表达式。算术表达式超出了正则表达式的能力。您必须使用某种与上下文无关的解析器。