我的代码中有几个以get_
开头的函数:
get_num(...)
,get_str(...)
我想将它们更改为get_*_struct(...)
。
我可以以某种方式匹配get_*
正则表达式,然后根据模式进行替换,以便:
get_num(...)
变为get_num_struct(...)
,
get_str(...)
变为get_str_struct(...)
你能否解释一下它背后的一些逻辑,因为理论正则表达式与UNIX
(或vi
中使用的正则表达式不同,它们是不同的吗?)而且我总是在努力想象他们出去了。
这必须在vi
编辑器中完成,因为这是主要的工作工具。
谢谢!
答案 0 :(得分:3)
要将get_num(...)
转换为get_num_struct(...)
,您需要在输入中捕获正确的文本。并且,您不能将括号放在正则表达式中,因为您可能需要匹配函数的指针,如&get_distance
中所示,并在注释中使用。但是,这部分取决于你使用vim的部分原因以及你需要将整个输入保持在一起的部分原因,我已经检查过这是否有效:
%s/get_\w\+/&_struct/g
在每一行上,找到以get_开头并继续至少一个字母,数字或下划线的每个表达式,并将其替换为整个匹配的字符串,后跟_struct。
认真地说;我不应该按规格回答这些问题。请注意,其他正则表达式引擎可能会使用\&而不是&amp ;.这取决于魔法集,这在vim中是默认的。
答案 1 :(得分:1)
另一种方法:
%s/get_\(\w*\)(/get_\1_struct(/g
这是做什么的:
\w
匹配任何“单词字符”; \w*
匹配0个或更多单词字符。\(...\)
告诉vim记住任何匹配...
。因此,\(w*\)
表示“匹配任意数量的字符,并记住您匹配的内容。然后您可以使用\1
(或\2
替换第二个等)来访问它。 get_\(\w*\)(
会查找get_
,后跟任意数量的字词,然后是(
。(对不起,如果那太冗长了 - 不确定你对vim正则表达式有多放心。)