За последние 24 часа нас посетили 18156 программистов и 1591 робот. Сейчас ищут 995 программистов ...

Ссылки вне тегов [url]

Тема в разделе "Регулярные выражения", создана пользователем Freakmeister, 6 дек 2012.

  1. Freakmeister

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

    С нами с:
    20 дек 2009
    Сообщения:
    888
    Симпатии:
    5
    Есть простая регулярка для обертывания ссылок в тексте:

    Код (PHP):
    1. preg_replace"'((?:http|https):\/\/[^\s]+)'is", "<a href=\"\\1\" />\\1</a>"); 
    Я не хочу чтобы она обертывала ссылки, которые находятся внутри тегов:

    Код (Text):
    1. [url]ссылка[/url]
    2. [url=ссылка]ссылка[/url]
    Как мне добавить в нее эти исключения?
     
  2. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    одной регуляркой выбрать текст ВНЕ тегов а второй уже вашей - произвести замену. одной регуляркой почти нереально, либо очень ресурсоемко
     
  3. Freakmeister

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

    С нами с:
    20 дек 2009
    Сообщения:
    888
    Симпатии:
    5
    Вот как надо быдлокодить, учитесь, нубы.

    Код (PHP):
    1. function do_magic_links($text) {
    2.     //это говнокод
    3.     $bbcode = array(
    4.         '[url]http://' => 'ALfk1jla7FGJOIghO3AGHoaIHf0g://',
    5.         '[url]https://' => 'ALfk1jla7FGJOIghO3AGHoaIHf1g://',
    6.         '[url=http://' => 'ALfk1jla7FGJOIghO3AGHoaIHf2g://',
    7.         '[url=https://' => 'ALfk1jla7FGJOIghO3AGHoaIHf3g://',
    8.         '[img]http://' => 'ALfk1jla7FGJOIghO3AGHoaIHf4g://',
    9.         '[img]https://' => 'ALfk1jla7FGJOIghO3AGHoaIHf5g://'
    10.     );
    11.         
    12.     $text=str_replace(array_keys($bbcode), array_values($bbcode), $text);
    13.     $text=preg_replace("'((?:http|https):\/\/[^\s]+)'is", "[url]\\1[/url]", $text);
    14.     $text=str_replace(array_values($bbcode), array_keys($bbcode), $text);
    15.     
    16.     return $text;
    17. }