2015-01-17 4 views
0

후회 나는이 정규 표현식 문제를 해결하지 못했고 빛이 올 것이라고 기대하지 않습니다. 그러므로 도움을 청할 때입니다. 나는 긴 txt 파일이 것은있는 반복 라인은 같다 :RegEx (단어 : 123, 345, 567 -> word.123, word.345, word.567)

acteur: 634, 681, 731 

내가 그것을 변환 싶어 : 물론

Acteur.634,Acteur.681,Acteur.731 

, 내가 다른 라인을 변경하려는 해달라고 . 단어 acteur:으로 시작하는 줄만 영향을 받아야합니다. 일을 얻을, 아직 모든 파일을 변경

inbob: -1 
mention: 
Il n'est pas distingué 
Acteur.731 
lieu: 
editeur: Les étoiles de la chanson 
collection: 
numed: 
nbv: 
nbp: 
date: [1934] 
date2: 1934 
(:remarque:Deuxième vérification faite : ok:)"); 

type: 
inbob: -1 
mention: 
Comme un moineau 
Acteur.634,Acteur.681,Acteur.731 
lieu: 
editeur: Les étoiles de la chanson 
collection: 
numed: 
nbv: 
nbp: 
date: [1930] 
date2: 1930 
(:remarque::)"); 

([0-9]+) 검색 및 Acteur.$1로 교체 :

inbob: -1 
mention: 
Il n'est pas distingué 
acteur: 731 
lieu: 
editeur: Les étoiles de la chanson 
collection: 
numed: 
nbv: 
nbp: 
date: [1934] 
date2: 1934 
(:remarque:Deuxième vérification faite : ok:)"); 

type: 
inbob: -1 
mention: 
Comme un moineau 
acteur: 634, 681, 731 
lieu: 
editeur: Les étoiles de la chanson 
collection: 
numed: 
nbv: 
nbp: 
date: [1930] 
date2: 1930 
(:remarque::)"); 

대상은 다음과 같습니다

는 내 파일 (일반 텍스트)의 조각이다 . 나는 acteur:으로 시작하는 줄로 프로세스를 제한하는 방법을 모르겠다. 나는 올바른 길을 놓치고 있다는 것을 알고있다.

감사합니다.

+0

당신은 실행하고 언어 나 도구? –

+1

나는 언어에 기반한 해결책을 제공 할 수 있었다. –

+0

흠, 미안 언어/도구가 사용 된 것을 잊어 버린 경우 죄송합니다. 순진한 대답은 EditPad 또는 SublimeText2와 같은 Windows 용 텍스트 편집기를 사용하고 있다는 것입니다. – Gilles

답변

0

PHP를 실행하는 경우 아래 정규식이 도움이 될 것입니다.

^(?!acteur:).*(*SKIP)(*F)|(?:^acteur:\h+|\h+) 

preg_replace에 위의 정규식을 사용하여 다음

^(?!acteur:).*Acteur.acteur:로 시작하고 다음 (*SKIP)(*F) 전체 일치가 실패 할 수 있습니다 모든 라인을 일치와 일치하는 문자를 대체합니다.

^acteur:\h+ 나머지 문자열에서이 정규식은 acteur: 부분에 다음 하나 이상의 공백 문자를 더한 것과 일치합니다. | 또는 \h+ 나머지 하나 이상의 공백 문자. 이 행을 건너 뛰었 기 때문에 acteur으로 시작하지 않는 행의 공백과 일치하지 않습니다.

DEMO

$str = <<< EOT 
inbob: -1 
mention: 
Il n'est pas distingué 
acteur: 731 
lieu: 
editeur: Les étoiles de la chanson 
collection: 
numed: 
nbv: 
nbp: 
date: [1934] 
date2: 1934 
(:remarque:Deuxième vérification faite : ok:)"); 

type: 
inbob: -1 
mention: 
Comme un moineau 
acteur: 634, 681, 731 
lieu: 
editeur: Les étoiles de la chanson 
collection: 
numed: 
nbv: 
nbp: 
date: [1930] 
date2: 1930 
(:remarque::)"); 
EOT; 
echo preg_replace('~^(?!acteur:).*(*SKIP)(*F)|(?:^acteur:\h+|\h+)~um', 'Acteur.', $str); 
+0

우한. 분명하고 훨씬 더 어려울 것으로 기대됩니다. 필자가 유능한 소프트웨어 (Windows)를 찾지 못하면 일하기가 쉽지 않습니다. 그러한 도구를 찾으면 지연된 응답이 발생했습니다. Avinash 고맙습니다. – Gilles