Поиск и замена текста

Тема в разделе "PHP", создана пользователем Smile, 11 ноя 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Smile

    Smile Нарушитель

    Регистр.:
    12 ноя 2006
    Сообщения:
    157
    Симпатии:
    11
    Нужна помощь, есть следующий текс к примеру:

    как из этой строки передать в перемену УРЛ картинки потом удалить из строки

    <img src='http://site.ru/public/upload/news_images/584/584860.jpg' alt="" width="100" border="0">


    кто знает? помогите?
     
  2. jabjab

    jabjab Создатель

    Регистр.:
    27 окт 2010
    Сообщения:
    42
    Симпатии:
    12
    Если предположить, что в переменной $html лежит текст из твоего примера, то после выполнения этого кода
    Код:
    $pattern = '/\<img src=\'(.*?)\' alt="" width="100" border="0"\>/';
    
    function fetchLink($matches) {
       global $link;
       $link = $matches[1];
    }
    
    $html = preg_replace_callback($pattern, 'fetchLink', $html);
    
    в $html останется текст без картинки, а в $link будет ссылка. Код накидал по-быстрому, чтобы было понятен способ.
     
  3. Smile

    Smile Нарушитель

    Регистр.:
    12 ноя 2006
    Сообщения:
    157
    Симпатии:
    11

    попробовал, часика 2 ковырялся с этим кодом так ничего и не получилось , ссылку не передает, картинку не удаляет... :(
     
  4. jabjab

    jabjab Создатель

    Регистр.:
    27 окт 2010
    Сообщения:
    42
    Симпатии:
    12
    Специально проверил. Залил текст на сайт. Запустил скрипт.
    PHP:
    <?php
    $html 
    file_get_contents('http://test4smile.narod.ru/news.txt');
    $pattern '/\<img src=\'(.*?)\' alt="" width="100" border="0"\>/';
    function 
    fetchLink($matches) {
       global 
    $link;
       
    $link $matches[1];
    }
    $html preg_replace_callback($pattern'fetchLink'$html);
    echo 
    "$link\n$html";
    Вот результат
    [​IMG]

    Что не работает-то? Сам код лишь показывает реализацию требуемой вещи, но если структура текста у вас другая, либо оформление картинки иное, понятное дело, нужно адаптировать регексп.
     
  5. Smile

    Smile Нарушитель

    Регистр.:
    12 ноя 2006
    Сообщения:
    157
    Симпатии:
    11
    хммм, я этот код пытался прикрутить к маленькому парсеру, но чтото не получается... вроде все правельно написано но работать не хочет

    PHP:
    <?php

    header
    ("Content-Type: text/html; charset=utf-8");

    $url 'http://www.newsland.ru/rss/getnews/ord/1/cat/0';
    $rss simplexml_load_file ($url);

    foreach ( 
    $rss->channel->item as $item 
    {
        
    $desc $item->description;
    }

    $html $desc;
    $pattern '/\<img border="0" src=\'(.*?)\' width="100" alt=""\>/';
    function 
    fetchLink($matches) {
       global 
    $link;
       
    $link $matches[1];
    }
    $html preg_replace_callback($pattern'fetchLink'$html);
    echo 
    "$link\n$html"

    ?>
    насчет структуры я понел, но в моем коде даже если структура правильная все равно не работает... может я чтото пропустил ?
     
  6. jabjab

    jabjab Создатель

    Регистр.:
    27 окт 2010
    Сообщения:
    42
    Симпатии:
    12
    Это все потому, что в первом примере url изображения в одиночных кавычках, а на newsland.ru — в двойных.
    Если заменить регексп на
    PHP:
    $pattern '/\<img border="0" src="(.*?)" width="100" alt=""\>/';
    то все заработает :)
     
    Smile нравится это.
  7. Smile

    Smile Нарушитель

    Регистр.:
    12 ноя 2006
    Сообщения:
    157
    Симпатии:
    11
    спасибо, работает...

    а можно как то сделать чтоб $pattern подстраивался сам под картинку и брал урл ? ведь на разных сайтах картинки в description могут выводится по разному...
     
  8. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    ещё универсальные варианты для тега img
    PHP:
    $test = <<<TEST
    test
    <img src='http://example.com/public/upload/news_images/1.jpg' alt="" width="100" border="0">
    test2
    <img src="http://example.com/public/upload/news_images/2.jpg">
    test3
    <img src="http://example.com/public/upload/news_images/3.jpg" />
    <img src='http://example.com/public/upload/news_images/4.jpg' />
    <img src=http://example.com/public/upload/news_images/5.jpg />
    <img
    src=http://example.com/public/upload/news_images/6.jpg 
    />
    <img width="100" src=http://example.com/public/upload/news_images/7.jpg />
    <img width="100" src=http://example.com/public/upload/news_images/8.jpg width="100" border=0 />
    TEST;

    header('Content-Type: text/plain; charset=utf-8');
    //все картинки и ссылки на них
    preg_match_all('#(<img\s*(.*)\s*src=[\'|"]*([^\s\'"]+)[^>]*>)#i'$test$img);
    print_r($img);
    //удаляем картинки
    $text preg_replace('#(<img\s*(.*)\s*src=[\'|"]*([^\s\'"]+)[^>]*>)#i'''$test);
    echo 
    $text;
    //заменяем картинки
    $text preg_replace('#(<img\s*(.*)\s*src=[\'|"]*([^\s\'"]+)[^>]*>)#i''<img src="http://www.example.com/logo.jpg" />'$test);
    echo 
    $text;
     
    Smile нравится это.
Статус темы:
Закрыта.