За последние 24 часа нас посетили 18708 программистов и 1659 роботов. Сейчас ищут 986 программистов ...

Замена адресов на ссылки

Тема в разделе "Регулярные выражения", создана пользователем Brothersssddsss, 17 мар 2010.

  1. Brothersssddsss

    Brothersssddsss Активный пользователь

    С нами с:
    17 мар 2010
    Сообщения:
    9
    Симпатии:
    0
    Нужен скрипт замены ссылок т.е адреса заменить на ссылки
    Например есть адреса:

    http://www.name.ru или http://name.net или http://www.name.com и [teg]http://www.name.ru|Текст Нужно чтобы первые три он замен... Нужно 2 рег. выражения, помогите пожалуйста.
     
  2. vuzy

    vuzy Активный пользователь

    С нами с:
    11 мар 2010
    Сообщения:
    199
    Симпатии:
    0
    Адрес:
    киев
    не знаю как с первыми тремя вариантами а вот с последним можно поступить так..
    PHP:
    1. <?
    2. $text='[teg]http://www.name.ru|Текст[url] это мой сайт заходите';
    3. str_replace('[teg]','<a href="',$text);
    4. str_replace('|','">',$text);
    5. str_replace('[url]','</a>',$text);
    6. echo $text; //<a href="http://www.name.ru">текст</a> это мой сайт заходите
    7. ?>
     
  3. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    vuzy
    Ггг, оно не будет работать
     
  4. Петр

    Петр Активный пользователь

    С нами с:
    20 мар 2006
    Сообщения:
    1.253
    Симпатии:
    0
    Адрес:
    Центр Вселенной
    vuzy, обоснуйте использование функции preg_replace() и объясните,
    почему она используется целых три раза?
     
  5. vuzy

    vuzy Активный пользователь

    С нами с:
    11 мар 2010
    Сообщения:
    199
    Симпатии:
    0
    Адрес:
    киев
    Apple будет оно работать... синтаксис правельный. и вместо того что б критиковать лучше бы сказали что вас конкретно не устраивает или предложили свой вариант. Единственный недочет в данной функции что оно поменяет все символы | на "> в сообщении и если есть текст в котором юзер пишет "собака | кошка | корова"
    вместо своего сообщения получит собака "> кошка "> корова. но это уже вопрос конкретно используемых тэгов и способа записи BBcode

    ТС
    функция используется три раза для наглядности =) вопервых она ищет в тексте элемент скажем [teg] и меняет его на <a href=" и так пока не обрабтаем все теги в сообщении....
    можно так же использовать целлых два массива для обработки тэгов в одном будут заменяемые тэги в другом будут тэги на которые заменять.
     
  6. Brothersssddsss

    Brothersssddsss Активный пользователь

    С нами с:
    17 мар 2010
    Сообщения:
    9
    Симпатии:
    0
    Ну, проверять даже не стану, так как это не выход из данной ситуации. Меня устраивает вариант только из 2 регулярных выражений, а в приведённом примере их уже 3 и то они делают только половину задачи.

    Суть в том, что первое рег. выражение должно заменять первые 3 www адреса, а 4й не трогать, потому что он обрамлён [teg] после выполнения первого рег. выражения выполняется второе, которое как раз ищет те www адреса которые обрамлены [teg].
     
  7. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    vuzy
    Да не будет оно работать, синтаксис регулярных выражений АБСОЛЮТНО неправильный.
    Во-первых, отсутствуют ограничители во втором регулярном выражении, а в первом и третьем НЕЯВНО они обозначены квадратными скобками, что делает работу ещё более неправильной, нежели задумано!
    Регулярные выражения и обычная работа со строками функцией str_replace — в корне разные вещи!
     
  8. vuzy

    vuzy Активный пользователь

    С нами с:
    11 мар 2010
    Сообщения:
    199
    Симпатии:
    0
    Адрес:
    киев
    Brothersssddsss так что вам готовый скрипт выложить что б изменять такие ссылки на правельные со всеми вытекающими... Так вы не по адресу обратились тут за вас ничего делать не будут... =) использовать нас не надо. Я лишь посоветовал как решить половину проблеммы а вы вместо того что б попробовать адаптировать функции покапатся в интернете почитать мануал говорите мне:
    мне за это денег не заплатят...

    Apple, таки да спасибо что напмнили... функция требует иного подхода... чем обычные строковые функции.
     
  9. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Мой вариант.
    Разбирайтесь ... оба.

    PHP:
    1. <?php
    2.  
    3. /**
    4.  * Какой-то текст со ссылками и прочей байдой
    5.  */
    6. $text = <<<EOD
    7. Hello.
    8. Write some links:
    9. [url=http://www.name.ru]http://www.name.ru[/url]
    10. and [url=http://name.net]http://name.net[/url] .. even [url=http://www.name.com]http://www.name.com[/url]
    11. Using of BBCodes [teg]http://www.name.ru|Текст[url]
    12. EOD;
    13.  
    14. /**
    15.  * Функциональная часть
    16.  */
    17. $text = preg_replace('~((?<!(?:\[teg:url\]))(?:http://|http://www\.)(?:[^[:space:]][a-z0-9._-]+)(?!(?:\[url:teg\])))~is', '<a href="$1">$1</a>', $text);
    18.  
    19. $text = preg_replace('#(?:\[teg:url\])((?:http://|http://www\.)(?:[^[:space:]][a-z0-9._-]+))\|(.+?)(?:\[url:teg\])#six', '<a href="$1">$2</a>', $text);
    20.  
    21. // Смотрим, что вышло
    22. echo $text;
    23.  
    24. ?>
    Всё крайне просто.
    Можно в приступе шизофрении упаковать это в одно единственное регулярное выражение.
    Но смысл?
     
  10. vuzy

    vuzy Активный пользователь

    С нами с:
    11 мар 2010
    Сообщения:
    199
    Симпатии:
    0
    Адрес:
    киев
    Apple, не горячись я все понял... =)) реально немного попутал str и preg, replace