За последние 24 часа нас посетили 67669 программистов и 1649 роботов. Сейчас ищут 898 программистов ...

PHP патэрн regexp. Подстановка тегов к ссылкам.

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

  1. victort

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

    С нами с:
    8 сен 2010
    Сообщения:
    86
    Симпатии:
    2
    Всем здравствуйте, может кто усовершенствует данные патэрны при условии что в тексте надо выделить приблизительно такой текст, а именно подставить тэги для ссылок:

    "Привет, зайди на сайт google.ru или google.com или напиши мне google@google.com"

    У меня получилось это сделать только в два прогона:

    PHP:
    1.  
    2.  
    3. $buffer = "Привет, зайди на сайт google.ru или google.com или напиши мне [email=google@google.com]google@google.com[/email]";
    4.  
    5. $buffer = preg_replace('/(\w[\w\-\.\:\#\%\/\[\]\$\&\_\?]+\@\w[\w\-\.\:\#\%\/\[\]\$\&\_\?]+\.+[a-z]{2,3})/i',
    6. '<a href =mailto:$0> $0</a>',
    7. $buffer);
    8.  
    9. $buffer = preg_replace('/(\w[\w\-\.\:\#\%\/\[\]\$\&\_\?]+\.[a-z]{2,3}\s)/i',
    10. '<a href="http://$0" target=_blank>$0</a>',
    11. $buffer);
    12.  
    13. print $buffer;
    14.  
    Но есть один минус после "сайт-ссылки" должен быть обязательно пробел. По другому решить проблему не удалось.

    Первый прогон выделяет все ссылки на почту а второй прогон выделяет все остальные ссылки.


    Кстати можно на этой основе сделать дополнительные прогоны которые позволят писать ссылки как хочеш т.е. надо убить ненужные дубляжи.
    Допустим так, чтоб сильно не парится:

    PHP:
    1.  
    2. $buffer= str_replace ('http://http://','http://',$buffer);
    3. $buffer= str_replace ('http://ftp://','ftp://',$buffer);
    4.  
    и т.д.
    [/php]