- 论坛徽章:
- 0
|
大家好,最近遇到一个正则匹配的问题,怎么搞都搞不定,请高手指点一下,谢谢啦。
输入文件:以其中一行为例
adad [get_pins sdad {adad/sdad/sada wewe/wew/wew wew/asd}] -dadad [get_clocks ada {saew_sda wea_aa}] dadas [get_pins sdad {adad/sdad/sada wewe/wew/wew wew/asd}] sdada [get_clocks ada {sewew_swea wwe_aa}] [get_clocks ada {zzwew_sda efga_aa}] dadsa
要求:
1,把所有get_pins 后面 {}内的内容,都加前缀yqx/,(内容之间是用空格分开的)
例如:[get_pins sdad {adad/sdad/sada wewe/wew/wew wew/asd}]
变成 [get_pins sdad {yqx/adad/sdad/sada yqx/wewe/wew/wew yqx/wew/asd}]
2,把所有get_clocks 后面 {}内的内容,都加前缀yqx_
例如: [get_clocks ada {sewew_swea wwe_aa}]
[get_clocks ada {yqx_sewew_swea yqx_wwe_aa}]
每行的get_pins 和get_clocks数量不定,后面{}内的参数数量也不确定。但书写规则跟例子中一样,是固定的。
规则是[get_pins xxx {xxx xxx xxx}]
[get_clocks xxx {xxx xxx xxx}]
我希望变成:
[get_pins xxx {yqx/xxx yqx/xxx yqx/xxx}]
[get_clocks xxx {yqx_xxx yqx_xxx yqx_xxx}]
我想请教一下,该如何对完成要求1,2中的替换。谢谢大家了。
我开始是这么实现的:- if (/(\[get_pins.*?)(.*?)\}\]/) {
- $change = $2;
- $change ~= s/\s/\syqx\//g;
- s/(\[get_pins.*?)(.*?)\}\]/$1yqx\/$change\}\]/g;
- }
- print;
复制代码 但匹配的不对,总是把一行中第一个$2的值,换给了后面所有的get_pins里。
对于get_clocks也是同样情况。
我想请教一下高手,这种替换该如何处理,谢谢大家啦。
上面的例子行,我希望替换完成后是:
adad [get_pins sdad {yqx/adad/sdad/sada yqx/wewe/wew/wew yqx/wew/asd}] -dadad [get_clocks ada {yqx_saew_sda yqx_wea_aa}] dadas [get_pins sdad {yqx/adad/sdad/sada yqx/wewe/wew/wew yqx/wew/asd}] sdada [get_clocks ada {yqx_sewew_swea yqx_wwe_aa}] [get_clocks ada {yqx_zzwew_sda yqx_efga_aa}] dadsa
请大家指点一下,非常感谢:) |
|