2009-09-16 10 views
0

PHP에서 간단한 텍스트 번역기를 만들려고합니다. 코드 언어는 여기regex는 이름 (하위) 그룹을 통해 XML과 유사한 태그의 값을 추출/대체합니다.

Blabla <translator id="TEST"/> 

선택이 될 수

Bla bla {translator id="TEST" language="de"/} 

됩니다 :

이 같은 일치 shoult

$result = preg_replace_callback(
    '#{translator(\s+(?\'attribute\'\w+)="(?\'value\'\w+)")+/}#i', 
    array($this, 'translateTextCallback'), 
    $aText 
); 

은 그것은 "속성"을 추출, 그러나 페치 마지막 하나. 필자의 첫 번째 생각은 PHP가 모든 매치마다 (명명 된) 배열 요소를 덮어 쓸 때 그룹 명명과 관련이있다. 그러나 이름을 지정하지 않은 그룹을 제외하면 마지막 일치 항목 만 반환됩니다. 여기

예를

Array 
(
    [0] => {translator id="TEST" language="de"/} 
    [1] => language="de" 
    [attribute] => language 
    [2] => language 
    [value] => de 
    [3] => de 
) 
+0

@void : 안녕하세요. Welcome to StackOverflow! 나는 코드의 일부를 포맷하기 위해 게시물을 편집 할 자유를 취 했으므로 읽기가 더 쉽습니다. 다음 질문에 대해서는 편집 상자 상단에 0과 1이 표시된 아이콘을 사용하여 수행 할 수 있습니다. 필요한 경우 "질문하기"페이지 오른쪽에 질문/답변 작성에 사용할 수있는 구문 참조를 가리키는 링크가 있습니다 :-) –

답변

1

그룹을 반복하면 마지막 경기를 얻을로 콜백으로 반환 된 배열입니다. 이 문제를 해결할 방법이 없습니다. 전체 속성/값 세트를 일치시킨 다음 코드에서 파싱해야합니다.