2011-04-09 6 views
0

찾을 수 있고 바꿀 수 있지만 현재 컨텍스트를 MD5 해시 된 버전으로 대체하려고합니다.preg_match에서 발견 된 여러 문자열을 MD5 버전으로 대체하는 방법은 무엇입니까?

$feed = preg_replace('/(<photo>.+?)+(<\/photo>)/i', '<photo>http://colorvisiontesting.com/plate%20with%205.jpg</photo>', $feed); 

이는 대체되었지만 그 내용도 가져와야합니다. 따라서이 경우 노드의 내용을 가져 와서 인라인으로 md5 ($ photocontents) 버전으로 대체하려고합니다.

나는이 문자열에서 발견되어 교체되어야 할 약 200 건의 사건이 있습니다.

preg_match_all은 그들을 찾아서 배열에 넣고 (도움이되지 않습니다) preg_replace가 정규식 일치 내용을 제공하지 않습니다. 예를 들어

:

<photo>img.jpg</photo> 

은 분명히 그 임의의 문자열입니다하지만 자체의 MD5 해시 버전으로 노드를 교체 할 필요가

<photo>43534e3242er234.jpg</photo> 

로 교체해야합니다. -

고마워요!

+0

일할 수 어쩌면 정규식? – Blender

+0

구체적인 문제는 무엇입니까? 찾을 수 있고 바꿀 수 있기 때문에 나는 하나도 보지 못합니다 ^^ – KingCrunch

+0

당신의 질문은 매우 혼란 스럽습니다. –

답변

2

당신은 함께 preg_replace_callback() 또는 preg_replace()을 사용할 수 있습니다 중 하나 ' e '수정자를 Hosh Sadiq가 제안했다. 다음은 두 번째 방법을 사용하는 테스트 된 코드입니다.

$feed = preg_replace('%(<photo[^>]*>)(.+?)(\.jpg</photo>)%ise', 
    '"$1". md5("$2") ."$3";', $feed); 
2
$feed = preg_replace('#\<photo\>(.*?)\.jpg\<\/photo\>#is', '<photo>'.md5('\\1').'.jpg</photo>', $feed); 

편집

$feed = '<photo>hello.jpg</photo> <photo>world.jpg</photo>'; 

function replace($matches){ 
    return '<photo>'.md5($matches[1]).'.jpg</photo>'; 
} 

$feed = preg_replace_callback('#<photo>(.*?).jpg</photo>#is', 'replace', $feed); 

echo $feed; //<photo>5d41402abc4b2a76b9719d911017c592.jpg</photo> <photo>7d793037a0760186574b0282f2f435e7.jpg</photo> 
+0

예 : img.jpg 43534e3242er234.jpg으로 바꿔야합니다. 분명히 임의의 문자열이지만 노드를 자체의 md5 해시 버전으로 교체해야합니다. –

+0

@ John Sloan,이 정규 표현식을 시도해보십시오 (업데이트 됨). –

+0

감사! 정답으로 설정하고 도움에 감사드립니다! –

0
<?php preg_replace('/yourRegex/e', 'md5(\'\\1\')', $subject); ?> 

통보 ..이 그것을 평가하기 위해 알려주는/분리 문자 후 전자 수정 ...

+0

과목이 없습니다. –

관련 문제