2009-09-16 1 views
0

Пытается создать простой текстовый переводчик в PHP.regex extract/replace значения из xml-подобных тегов через named (sub) groups

Это shoult матч что-то вроде:

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

Язык может быть опционально

Blabla <translator id="TEST"/> 

Вот код:

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

Он извлекает "атрибуты", но получает только последний. Моя первая мысль заключалась в том, что это связано с именами групп, когда PHP перезаписывает элементы массива (named) в каждом матче. Но, оставив группу, назвав ее, она возвращает только последний матч.

Вот массив, возвращаемый обратный вызов в качестве примера

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

@void: Привет, и Добро пожаловать на StackOverflow! Я взял на себя смелость редактировать свой пост, отформатировать части кода, чтобы их было легче читать. Для ваших следующих вопросов это можно сделать, используя значок с 0 и 1 в верхней части окна редактирования; и, при необходимости, есть ссылка справа от страницы «спрашивать вопрос», которая указывает на ссылку синтаксиса, которую вы можете использовать для написания вопросов/ответов :-) –

ответ

1

Когда вы итерация группы, вы получите только последний матч. Об этом нет. Вам нужно сопоставить весь набор атрибутов/значений, а затем проанализировать их в коде.