|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
大家好,最近遇到一个正则匹配的问题,怎么搞都搞不定,请高手指点一下,谢谢啦。
输入文件:以其中一行为例
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;
[/code]
但匹配的不对,总是把一行中第一个$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
请大家指点一下,非常感谢:) |
|