За последние 24 часа нас посетили 17088 программистов и 1835 роботов. Сейчас ищут 1685 программистов ...

Не пойму где, в паттерне, ошибка

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

  1. Great_DUKE

    Great_DUKE Новичок

    С нами с:
    2 ноя 2015
    Сообщения:
    106
    Симпатии:
    0
    Есть код, который выполняет замену в $message:
    PHP:
    1. $message = preg_replace('#[-a-zA-Z0-9@:%_\+.~\#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~\#?&//=]*)?#si', "[AHREF]$0[/AHREF]", $message);
    PHP:
    1. $message = 'https://mydomain.ru?get=1';
    В итоге получается
    PHP:
    1. $message = '[AHREF]https://mydomain.ru[/AHREF]?get=1'
    когда должно получиться
    PHP:
    1. $message = '[AHREF]https://mydomain.ru?get=1[/AHREF]'
    В чем проблема?
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    http://stackoverflow.com/a/6041965
    PHP:
    1. preg_replace("/(http|ftp|https):\/\/([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?/i", "($0)", "http://mail.ru https://www.google.com/?sgsd=45 test sdfsf http://php.ru");
     
    Great_DUKE нравится это.
  3. Great_DUKE

    Great_DUKE Новичок

    С нами с:
    2 ноя 2015
    Сообщения:
    106
    Симпатии:
    0
    Данный паттерн не ищет слова по типу mydomain.ru, в которых не указан протокол
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Great_DUKE нравится это.
  5. Great_DUKE

    Great_DUKE Новичок

    С нами с:
    2 ноя 2015
    Сообщения:
    106
    Симпатии:
    0
    Хотя, я уже подстроил под себя, спасибо
     
  6. Great_DUKE

    Great_DUKE Новичок

    С нами с:
    2 ноя 2015
    Сообщения:
    106
    Симпатии:
    0
    У меня возникает еще одна проблема.
    PHP:
    1. $message='mydomain.ru?get=1&post=1';  $message = preg_replace('/((http|ftp|https):\/\/)?([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?/', "[AHREF]$0[/AHREF]", $message);
    Получается
    PHP:
    1. $message = '[AHREF]mydomain.ru?get=1&[/AHREF];post=1'
    Вопрос: Откуда взялся символ ";" в переменной $message?