[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Прошу помочь с регулярным выражением
mavrrr
Не силен в регулярных выражениях, а задача такая:

необходимо в html коде изменить имя домена, но только в тегах <a href="XXXX">.

т.е. например имеем код:

<img src="domain1.ru/images/style/header_ico_reg.gif" alt="">
<a
href="domain1.ru/forum/ucp.php?mode=register" class="reg">Регистрация</a>


нужно поменять domain1 на domain2, в итоге должно получиться так:

<img src="domain1.ru/images/style/header_ico_reg.gif" alt="">
<a
href="domain2.ru/forum/ucp.php?mode=register" class="reg">Регистрация</a>




Спустя 22 минуты, 11 секунд (26.11.2010 - 10:46) kirik написал(а):
str_replace('href="domain1.ru/', 'href="domain2.ru/', $str);

Спустя 46 минут, 38 секунд (26.11.2010 - 11:32) mavrrr написал(а):
так не прокатит, исходный код может быть таким:

<img src="domain1.ru/images/style/header_ico_reg.gif" alt="">
<a href="afisha.domain1.ru/forum/ucp.php?mode=register" class="reg">Регистрация</a>
<a href="news.domain1.ru/forum/ucp.php?mode=register" class="reg">Регистрация</a>

после обработки должно получится так:

<img src="domain1.ru/images/style/header_ico_reg.gif" alt="">
<a href="afisha.domain2.ru/forum/ucp.php?mode=register" class="reg">Регистрация</a>
<a href="news.domain2.ru/forum/ucp.php?mode=register" class="reg">Регистрация</a>

Спустя 12 минут, 36 секунд (26.11.2010 - 11:45) kirik написал(а):
Тогда так:
$str = '<img src="domain1.ru/images/style/header_ico_reg.gif" alt="">
<a href="afisha.domain1.ru/forum/ucp.php?mode=register" class="reg">Регистрация</a>
<a href="news.domain1.ru/forum/ucp.php?mode=register" class="reg">Регистрация</a>'
;

$str = preg_replace('#<a(.+?)href="(.*?)domain1\.ru/#i', '<a\\1href="\\2domain2.ru', $str);
echo $str;

Спустя 1 час, 56 минут, 26 секунд (26.11.2010 - 13:41) mavrrr написал(а):
Цитата (kirik @ 26.11.2010 - 08:45)
Тогда так:
$str = '<img src="domain1.ru/images/style/header_ico_reg.gif" alt="">
<a href="afisha.domain1.ru/forum/ucp.php?mode=register" class="reg">Регистрация</a>
<a href="news.domain1.ru/forum/ucp.php?mode=register" class="reg">Регистрация</a>'
;

$str = preg_replace('#<a(.+?)href="(.*?)domain1\.ru/#i', '<a\\1href="\\2domain2.ru', $str);
echo $str;

получается вот так:

<img src="domain1.ru/images/style/header_ico_reg.gif" alt="">
<a href="afisha.domain2.ruforum/ucp.php?mode=register" class="reg">Регистрация</a>
<a href="news.domain2.ruforum/ucp.php?mode=register" class="reg">Регистрация</a>

news.domain2.ruforum слитно

Спустя 3 часа, 10 минут, 54 секунды (26.11.2010 - 16:52) mavrrr написал(а):
еще проблема, когда я загружаю в переменную $str страницу html полностью, preg_replace() возвращает пустую строку sad.gif

Спустя 4 часа, 20 минут, 44 секунды (26.11.2010 - 21:13) kirik написал(а):
Цитата (mavrrr @ 26.11.2010 - 05:41)
news.domain2.ruforum слитно

Ну да, слэш вчера спросони потерял.
$str = preg_replace('#<a(.+?)href="(.*?)domain1\.ru/#i', '<a\\1href="\\2domain2.ru/', $str);


Цитата (mavrrr @ 26.11.2010 - 08:52)
когда я загружаю в переменную $str страницу html полностью, preg_replace() возвращает пустую строку

Скорее всего памяти не хватает. У нас так форум иногда делает.

Спустя 13 часов, 36 минут, 48 секунд (27.11.2010 - 10:50) mavrrr написал(а):
За прег большой респект!

На счет не хватает памяти, очень сомневаюсь, на локалхосте 8гигов ОЗУ, может что с кодировками?

Спустя 24 минуты, 21 секунда (27.11.2010 - 11:14) kirik написал(а):
Цитата (mavrrr @ 27.11.2010 - 02:50)
очень сомневаюсь, на локалхосте 8гигов ОЗУ

Все 8 отданы на съедение пхп?

Цитата (mavrrr @ 27.11.2010 - 02:50)
может что с кодировками?

Наврядли вообще.. А какая кодировка текста?

Спустя 2 часа, 47 минут, 9 секунд (27.11.2010 - 14:01) FatCat написал(а):
Цитата (kirik @ 27.11.2010 - 12:14)
Все 8 отданы на съедение пхп?

Регулярки как-то странно работают с памятью. Похоже, выделение памяти регулярке не зависит от количества памяти в пхп. Если интересно, могу показать в кодах. Я для себя решил где только можно избегать регулярок и пользоваться substr, strpos или на крайний случай explode для резки текста.

Спустя 1 день, 2 часа, 27 минут, 32 секунды (28.11.2010 - 16:29) mavrrr написал(а):
Цитата (kirik @ 27.11.2010 - 08:14)
Цитата (mavrrr @ 27.11.2010 - 02:50)
очень сомневаюсь, на локалхосте 8гигов ОЗУ

Все 8 отданы на съедение пхп?

Цитата (mavrrr @ 27.11.2010 - 02:50)
может что с кодировками?

Наврядли вообще.. А какая кодировка текста?

проблема все таки в кодировках, если я делаю так:

$str = file_get_contents('http://www.ya.ru/');
echo $str;

все ок, но если я делаю хотябы так:

$str = file_get_contents('http://www.ya.ru/');
$str = substr($str, 0, 20);
echo strlen($str);
echo $str;
echo "end";

выдает только: 20
т.е. substr отрабатывает, но при выводе проблемы :( скрипт просто завершает свою работу, даже варнинг не показывает :(

Спустя 4 часа, 31 минута, 8 секунд (28.11.2010 - 21:00) kirik написал(а):
Цитата (mavrrr @ 28.11.2010 - 08:29)
т.е. substr отрабатывает, но при выводе проблемы sad.gif скрипт просто завершает свою работу, даже варнинг не показывает sad.gif

Я так понимаю у вас денвер стоит?

Спустя 2 часа, 42 минуты, 39 секунд (28.11.2010 - 23:42) mavrrr написал(а):
денвер стоит, но я попробовал еще на 2х хостах, best-hoster.ru и atlex.ru, тоже самое sad.gif попробуй у себя

Спустя 33 минуты, 25 секунд (29.11.2010 - 00:16) kirik написал(а):
Цитата (mavrrr @ 28.11.2010 - 15:42)
попробуй у себя

ваш скрипт выдаёт:
20<!DOCTYPE HTML PUBLIend

тоесть все нормально отрабатывается.
У вас файл в utf8?

Спустя 10 часов, 40 минут, 11 секунд (29.11.2010 - 10:56) mavrrr написал(а):
Да, проблема была в кодировке php файла, даже не думал что это может как то влиять. Но сам прег работает не во всех случаях:

<li><a href="http://news.domain1.ru">Новости</a></li>
<li><a
href="http://mama.domain1.ru/place/?=domain1.ru">Я мама</a></li>
<li><a
href="http://www.beauty.domain1.ru">Красота и здоровье</a></li>
<li><a
href="www.fashion.domain1.ru">Мода</a></li>
<li><a
href="www.domain1.ru/gut/">Дом</a></li>
<li><a
href="http://holidays.domain1.ru">Отдыхаем</a></li>
<li
class="last"><a href="http://lifestyle.domain1.ru">Стиль жизни</a></li>

Спустя 1 день, 17 часов, 19 минут, 45 секунд (1.12.2010 - 04:16) kirik написал(а):
$str = preg_replace('#<a(.+?)href="(.*?)domain1\.ru(/?)#i', '<a\\1href="\\2domain2.ru\\3', $str);
Быстрый ответ:

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