2017-12-19 23 views
-1

어떻게하면 Name = "Mario Rossi"를 잡을 때만이 값을 바꿀 수 있습니까?내용 바꾸기 regex - Perl (multiline)

는 난 단지 도움을

<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> 

덕분에 98와 94를 교체해야!

+1

귀하의 시도는 어디입니까? 너는 무엇을 탐구 했는가? –

+1

이것은 XML 구조이기 때문에 Perl 솔루션보다는 XML 솔루션을 살펴 보는 것이 좋습니다. – AntonH

+0

나는 "PMRQ : InstrId> 94 과 일치하지만"PMRQ : InstrId "가"Mario Rossi "와 일치하면 찾을 수 있습니다. – Mariano

답변

1

예를 들어, xsh 당신이 필요

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

좋은 답변이지만 Perl에 도움을 요청하고 있습니다. –

+0

@EduardoLynchAraya :'xsh'은 Perl로 작성되었으며, [XML :: LibXML] (http://p3rl.org/XML::LibXML) 라이브러리를 감싸는 래퍼입니다. 이 코드를'xsh' 함수의 매개 변수로 Perl 스크립트에 포함시킬 수 있습니다. – choroba

+0

나는 perl 스크립트에 필요하다. 어떤 생각을 가지고 있니? – Mariano

0

이 작동, 더 추가 모듈을 쓸 수 없습니다.

$ text에 수정할 다중 행 데이터가 있다고 가정합니다. 그럼 그냥 수행 끝에

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

'g'(전역) 수정은 여러 일치를 수행하기 위해 필요하다 (하지만 제로가 있거나 하나가 일치하는 경우 다치게하지 않습니다).