Условие в парсере для своего URL

Тема в разделе "PHP", создана пользователем jcrush, 2 окт 2009.

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

    jcrush

    Регистр.:
    10 ноя 2006
    Сообщения:
    692
    Симпатии:
    55
    Добрый день всем.

    У меня есть парсер который режет все урлы:

    PHP:
    $textpreg_replace('[http://]'''$text);
    $textpreg_replace('[https://]'''$text);
    $textpreg_replace('[www.]'''$text); 
    Мне необходимо чтобы это работало для всех урлов кроме урла с моим сайтом, как такое сделать?

    Благодарю.
     
  2. black.cat

    black.cat

    Регистр.:
    13 ноя 2008
    Сообщения:
    203
    Симпатии:
    32
    регулярки выше созданы неправильно - это первое.
    ибо
    $text= preg_replace('[http://]', '', $text);
    кроме
    "http://"
    также означает "t:t//ph" или "//tpph://"
    ну и т.д.
    второе. небуду помогать готовым кодом т.к. для начинающих это зло.
    Скажу что у меня алгоритм работает прмиерно так:
    находит в коде ВСЕ <a href"..."> потом найденное пихает в массив.
    потом анализирует на предмет:
    1. пустоты или "#" (выкидывает их **х из массива)
    2. ссылко типа "mailto:", "javascript" (по ситуации)
    3. ссылок начнающихся не с http:// или https:// (это ВС)
    почти все шо останется после этого есть локальные ссылки...
    П.С. для баловства с регуляркой рекомендую Regex Coach (отличный софт для тренировки перед загоном в код)
     
  3. jcrush

    jcrush

    Регистр.:
    10 ноя 2006
    Сообщения:
    692
    Симпатии:
    55
    Как умею, попробовал условия использовать, не работает =(
     
  4. zaphta

    zaphta Создатель

    Регистр.:
    14 сен 2009
    Сообщения:
    25
    Симпатии:
    5
    специально ломаем свой урл
    $text= preg_replace('~(http)(s?://moidomen.ru)~is', 'httt\1', $text);
    удаляем все остальные
    $text= preg_replace('~(https?://)~is', '', $text);
    восстанавливаем свой URL
    $text= preg_replace('~(httt)(s?://moidomen.ru)~is', 'http\1', $text);

    вот так сделай. там еще есть варианты с предусловием последующего кода,
    но копай сам если хочешь правильно сделать :)
     
  5. Alexitdv

    Alexitdv

    Регистр.:
    4 янв 2008
    Сообщения:
    161
    Симпатии:
    65
    Изврат :)

    "#(?:http\://)[^(?:moidomen\.ru)]#" примерно так. Может не работать :) Пишу по памяти :)
     
  6. jcrush

    jcrush

    Регистр.:
    10 ноя 2006
    Сообщения:
    692
    Симпатии:
    55
    правда изврат, и не работает к тому же
     
  7. Alexitdv

    Alexitdv

    Регистр.:
    4 янв 2008
    Сообщения:
    161
    Симпатии:
    65
    пример текста кинь сюда, напишу регулярку для убивания ссылок.
     
  8. jcrush

    jcrush

    Регистр.:
    10 ноя 2006
    Сообщения:
    692
    Симпатии:
    55
    вот текст
    $text= preg_replace('[http://]', '', $text);
    $text= preg_replace('[https://]', '', $text);
    $text= preg_replace('[www.]', '', $text);

    мне надо убивать все ссылки кроме если в урле есть ссылка а мой сайт что еще надо?
     
  9. kud

    kud Постоялец

    Регистр.:
    18 фев 2009
    Сообщения:
    89
    Симпатии:
    11
    Честно говоря, вобще не понятно причем тут текст который Вы предоставили Выше.
    Если Вы хотите в тексте убрать все ссылки, кроме тех которые ссылаются на Ваш домен, тогда регулярное выражение должно быть
    приблизительно таким:
    PHP:
    $text 'это <a href="http://www.mysite.com/page1.html">ссылка на мой сайт</a> и другая <a href="http://www.notmysite.com/page1.html">ссылка не на мой сайт</a> и еще одна ссылка на <a href="http://www.mysite.com">мой</a> сайт';
    echo 
    preg_replace("#<a[^>]+href=\"http://(?!www\.mysite\.com)[^>]+>(.+)</a>#Usi","",$text);
     
  10. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    PHP:
    $text preg_replace('%<a(.*?)</a>%ie'"clear('\\0');"$text); 
    echo(
    $text);

    function 
    clear($link) {
        if (
    false !== strpos($link'www.mysite.com')) {
            return 
    $link;
        }
    }
    кстати еще такой код можно применить, вырезает все ссылки и прогоняет через функцию. Такой код можно использовать там, где будет сложность составления вышеприведенной регулярки (под субдоменам, по страницам и т.д.)
     
Статус темы:
Закрыта.