用于重构数组的正则表达式

时间:2009-06-15 14:40:00

标签: c regex coccinelle

我有一个非常大的C编程项目,它使用了这个命名约定的数千个struct变量:

specificstruct->x = specificstruct->y + specificstruct->z

我想做一些重构,即将大多数这些struct成员转换为数组。上面的代码如下所示:

specificstruct->x[i] = specificstruct->y[i] + specificstruct->z[i]

......我不想浪费一整天手动完成这一切。商店里有没有合适的正则表达式?

编辑:它始终是相同的结构,但方程式各不相同。

提前致谢!

祝你好运, P. Nilsson

4 个答案:

答案 0 :(得分:2)

我不确定您的具体情况,但也许Coccinelle可以帮助您。它是一个修补源代码的系统,基于一些规则,如“如果x是没有函数调用的表达式,将x + x更改为2 * x”等。

答案 1 :(得分:0)

对于类似这样的通用方法应该做的 - 假设你的表达式之间有一致的间距

(.*?->.) = (.*?->.) \+ (.*?->.)

然后,您可以将新的数组结构编写为:

\1[i] = \2[i] + \3[i]

答案 2 :(得分:0)

s/\(specificstruct->x\) = \(specificstruct->y\ )\+ \(specificstruct->z\)/\1[i] = \2[i] + \3[i]/g

答案 3 :(得分:0)

如果您只是寻找名称后跟 - >那么一个角色,你可以试试

(?<struct>\w+)\s?->\s?(?<var>\w{1}) //single char after ->
(?<struct>\w+)\s?->\s?(?<var>\w+) //multiple char after ->

通过这种方式,您可以在进行任何替换之前比较这些名称。 \ s?即使你在一些而不是其他人之间增加了间距,也有助于匹配。