替换内容正则表达式 - Perl(多行)

时间:2017-12-19 15:24:06

标签: regex perl replace

只有当我抓住Name =" Mario Rossi"?

时才能更换此值

我需要将94替换为98仅用于

<PMRQ:Name>John Smith</PMRQ:Name>
<PMRQ:PmtId>                                                                    
<PMRQ:InstrId>95</PMRQ:InstrId>                                                 
<PMRQ:EndToEndId>45700100523011712061901541</PMRQ:EndToEndId>                   
</PMRQ:PmtId> 

<PMRQ:Name>Mario Rossi</PMRQ:Name>
<PMRQ:PmtId>                                                                    
<PMRQ:InstrId>94</PMRQ:InstrId>                                                 
<PMRQ:EndToEndId>45700100522011712061901541</PMRQ:EndToEndId>                  
</PMRQ:PmtId> 

感谢您的帮助!!

2 个答案:

答案 0 :(得分:1)

例如,在xsh中你可以写

open file.xml ;
for //PMRQ:Name[.="Mario Rossi"]
    set following-sibling::PMRQ:PmtId[1]/PMRQ:InstrId 98 ;
save :b ;

答案 1 :(得分:0)

这样做,不需要额外的模块。

假设$ text包含您要修改的多行数据。然后就做:

$text=~s/<PMRQ:Name>Mario Rossi<\/PMRQ:Name>\s*<PMRQ:PmtId>\s*<PMRQ:InstrId>\K\d+/98/msg;

&#39;&#39;&#39;最后需要(全局)修饰符来执行多个匹配(但如果你有零个匹配或一个匹配则不会受到伤害。)