我有一个非常大的C编程项目,它使用了这个命名约定的数千个struct变量:
specificstruct->x = specificstruct->y + specificstruct->z
我想做一些重构,即将大多数这些struct成员转换为数组。上面的代码如下所示:
specificstruct->x[i] = specificstruct->y[i] + specificstruct->z[i]
......我不想浪费一整天手动完成这一切。商店里有没有合适的正则表达式?
编辑:它始终是相同的结构,但方程式各不相同。
提前致谢!
祝你好运, P. Nilsson
答案 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?即使你在一些而不是其他人之间增加了间距,也有助于匹配。