[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вопрос по замене с регуляркой.
marsh123
Здравствуйте.

Суть задачи. Необходимо все вхождения
<span hashHref="некий хеш, всегда разный" hashString="некий хеш, всегда разный"></span>

заменить на раскодированный хеш, который всегда разный :rolleyes: (base64).

Что уже сделал. Регулярку я написал, но она заменяет блок спан на хеш, не декодируя его:
$text = preg_replace("/<span\shashHref=\"([^\"]*)\"\shashString=\"([^\"]*)\">[^<]*<\/span>/i", "\${1}", $text);

(для начала использую только первый хеш, с ним бы разобраться), сама регулярка работает, все вхождения заменяются на хеш.

То, что не получилось. А не получилось, собственно, декодирование, сначала я думал, что так прокатит:
$text = preg_replace("/<span\shashHref=\"([^\"]*)\"\shashString=\"([^\"]*)\">[^<]*<\/span>/i", base64_decode("\${1}"), $text);

Не тут то было, блок заменяется на пустую строку..

Наставьте пожалуйста на путь истинный, как решить мою задачку, уже начал писать посимвольный разбор, но это ужасно муторно :unsure:

Может есть более простое решение.

Спасибо заранее :D



Спустя 5 минут, 9 секунд (8.11.2011 - 21:35) Winston написал(а):
А так ?
$text = preg_replace("/<span\shashHref=\"([^\"]*)\"\shashString=\"([^\"]*)\">[^<]*<\/span>/ie", base64_decode("$1"), $text);

Спустя 6 минут, 17 секунд (8.11.2011 - 21:41) marsh123 написал(а):
Все также.. пустая строка (на месте всего блока <span>)

Спустя 47 минут, 27 секунд (8.11.2011 - 22:29) marsh123 написал(а):
Решил проблему.

Сначала раскодировал:
preg_match_all("/hashHref=\"([^\"]*)\"/i", $text, $out, PREG_PATTERN_ORDER);
preg_match_all("/hashString=\"([^\"]*)\"/i", $text, $out2, PREG_PATTERN_ORDER);
for($i = 0; $i < count($out[1]); $i++) {
$text = str_replace($out[1][$i], base64_decode($out[1][$i]), $text);
$text = str_replace($out2[1][$i], base64_decode($out2[1][$i]), $text);
}


А потом уже выполнил замену по регулярке.

Спустя 32 минуты, 19 секунд (8.11.2011 - 23:01) Winston написал(а):
Вот так тоже работает
$text = '<span hashHref="0L/RgNC40LLQtdGC" hashString="0L/RgNC40LLQtdGC"></span>';
echo preg_replace("#<span\shashHref=\"([^\"]*)\"\shashString=\"([^\"]*)\">[^<]*</span>#isueU", 'base64_decode("$1") . "<br/>" . base64_decode("$2")', $text);

Выводит
Цитата
привет
привет

Спустя 1 минута, 23 секунды (8.11.2011 - 23:02) marsh123 написал(а):
Спасибо, так действительно лучше smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.