Форумы портала PHP.SU » PHP » Регулярные выражения » Поиск и замена значений между тегами

Страниц (1): [1]
 

1. fullzero - 22 Января, 2017 - 18:50:34 - перейти к сообщению
Всем привет. Подскажите пожалуйста, как произвести замену значений в тегах? У меня есть массив оригинальных строк и уже переведенных, саму замену произвожу в файле. Пробовал через str_replace но он меняет все найденные совпадения, получается нечто: <ТекстBlock ТекстWrapping="Wrap">Цвет</ТекстBlock> )))

Оригинальные значения искал через preg_match_all, после сохранял в базу и делал перевод
PHP:
скопировать код в буфер обмена
  1. preg_match_all('/<TextBlock(.*?)>(.*?)<\/TextBlock>/', $file, $TextBlock);
  2. preg_match_all('/<Label(.*?)="(.*?)"(.*?)\/>/', $file, $Label);


пример файла
CODE (htmlphp):
скопировать код в буфер обмена
  1. <TextBlock TextWrapping="Wrap">Color</TextBlock>
  2. <TextBlock>Greed</TextBlock>
  3. <Label>Text</Label>
  4. и прочие поля


Попытка произвести замену Ха-ха
PHP:
скопировать код в буфер обмена
  1. $query = "SELECT `en`,`ru` FROM `#__translate` WHERE ru!=\"\"";
  2. $db->setQuery($query);
  3. $row = $db->loadObjectList();
  4.  
  5. for($i=0;$i<=count($row);$i++) {
  6. $patterns = array();
  7. $patterns[0] = '/<GroupBox Header="'.$row[$i]->en.'"(.*?)>/';
  8. $patterns[1] = '/<Label(.*?)="'.$row[$i]->en.'"(.*?)\/>/';
  9. $patterns[2] = '/<TextBlock(.*?)>'.$row[$i]->en.'<\/TextBlock>/';
  10.  
  11. $replacements = array();
  12. $replacements[0] = '/<GroupBox Header="'.$row[$i]->ru.'"(.*?)>/';
  13. $replacements[1] = '/<Label(.*?)="'.$row[$i]->ru.'"(.*?)\/>/';
  14. $replacements[2] = '/<TextBlock(.*?)>'.$row[$i]->ru.'<\/TextBlock>/';
  15.  
  16. $result = preg_replace($patterns, $replacements, $file);
  17. }


Как я понял, я намудрил с шаблонами... Кто подскажет или объяснит как поправить дело?
2. Строитель - 22 Января, 2017 - 19:19:47 - перейти к сообщению
fullzero, если я вас правильно понял
PHP:
скопировать код в буфер обмена
  1. $str = '<TextBlock TextWrapping="Wrap">Color</TextBlock>';
  2. $patt = '~(<TextBlock[^>]*>).*?(</TextBlock>)~iu';
  3.  
  4. echo preg_replace($patt, '$1Цвет$2', $str);
  5. // Исходный код будет такой:
  6. // <TextBlock TextWrapping="Wrap">Цвет</TextBlock>
3. fullzero - 22 Января, 2017 - 19:34:34 - перейти к сообщению
Строитель пишет:
fullzero, если я вас правильно понял
PHP:
скопировать код в буфер обмена
  1. $str = '<TextBlock TextWrapping="Wrap">Color</TextBlock>';
  2. $patt = '~(<TextBlock[^>]*>).*?(</TextBlock>)~iu';
  3.  
  4. echo preg_replace($patt, '$1Цвет$2', $str);
  5. // Исходный код будет такой:
  6. // <TextBlock TextWrapping="Wrap">Цвет</TextBlock>


Не совсем то, у меня есть таблица, в ней есть все оригинальные поля (Color, Text, и так далее) и перевод полей на русский язык, вот мне надо заменить оригинальный текст в тегах на мой переведенный

 

Powered by ExBB FM 1.0 RC1