Я понимаю что это делается просто, но моих мозгов не хватает. Есть шаблон, который заменяет сложные ссылки. Код (PHP): /(https?:\/\/)?(www\.)?([-а-яa-zёЁцушщхъфырэчстью0-9_\.]{2,}\.)(рф|[a-z]{2,6})((\/[-а-яёЁцушщхъфырэчстьюa-z0-9_]{1,})?\/?([a-z0-9_-]{2,}\.[a-z]{2,6})?(\?[a-z0-9_]{2,}=[-0-9]{1,})?((\&[a-z0-9_]{2,}=[-0-9]{1,}){1,})?)/i Ломаю голову, не могу добавить в этот шаблон домен-исключение. Т.е. чтобы отсеивались все сложные ссылки, кроме ссылок в которых доменом выступает, например yandex.ru. Код (PHP): $patterns="/(https?:\/\/)?(www\.)?([-а-яa-zёЁцушщхъфырэчстью0-9_\.]{2,}\.)(рф|[a-z]{2,6})((\/[-а-яёЁцушщхъфырэчстьюa-z0-9_]{1,})?\/?([a-z0-9_-]{2,}\.[a-z]{2,6})?(\?[a-z0-9_]{2,}=[-0-9]{1,})?((\&[a-z0-9_]{2,}=[-0-9]{1,}){1,})?)/i "; $rеplace="Текст для замены ссылок, кроме ссылок с доменом yandex.ru"; $msg=preg_replace($patterns, $rеplace, $msg); Буду рад любой помощи. Спасибо! Подсказка от модератора: Любой код или текст конфигурации пишите между тегом [code=php] и [/code]. Используйте отступы в коде для форматирования текста. Это помогает быстрее понять вас, увеличивает шанс на получение ответа. Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
А можно отформатировать код? Там переносы табуляция, не хрена ведь не разобрать. А что делает [-а-яёЁцушщхъфырэчстьюa-z0-9_] может так проще будет [\wа-я_Ё]
(?!temp) Только не помню поддерживает ли этот флаг php, попробуй. (temp){0} Точно заработает. [^t][^e][^m][^p] Такое тоже возможно, но не советую так делать. Вот тебе пример проверки домена: Код (PHP): ( # Твоё исключение (temp){0} # Имя домена [\wа-я]{1,63} ) \. (рф|[a-z]{2,})
Извини, немного не понял что куда поставить... А можно на моем примере? Код (PHP): $patterns="/(https?:\/\/)?(www\.)?([-а-яa-zёЁцушщхъфырэчстью0-9_\.]{2,}\.)(рф|[a-z]{2,6})((\/[-а-яёЁцушщхъфырэчстьюa-z0-9_]{1,})?\/?([a-z0-9_-]{2,}\.[a-z]{2,6})?(\?[a-z0-9_]{2,}=[-0-9]{1,})?((\&[a-z0-9_]{2,}=[-0-9]{1,}){1,})?)/i "; $rеplace="Текст для замены ссылок, кроме ссылок с доменом yandex.ru"; $msg=preg_replace($patterns, $rеplace, $msg);
Да, есть. Вот рабочий код заменяющий все ссылки. Код (PHP): <?php header("Content-Type: text/html; charset=utf-8"); $msg = "Это тестовый пример сайта http://example.ru/test/1.jpg в котором нужно заменить ссылку на произвольный текст.<br> Вот этот сайт: www.test.com тоже является примером.<br>Однако ссылка сайта яндекса http://www.yandex.ru/map/map.php является исключением и ее трогать не нужно.<br>"; $patterns="/(https?:\/\/)?(www\.)?([-а-яa-zёЁцушщхъфырэчстью0-9_\.]{2,}\.)(рф|[a-z]{2,6})((\/[-а-яёЁцушщхъфырэчстьюa-z0-9_]{1,})?\/?([a-z0-9_-]{2,}\.[a-z]{2,6})?(\?[a-z0-9_]{2,}=[-0-9]{1,})?((\&[a-z0-9_]{2,}=[-0-9]{1,}){1,})?)/i "; $rеplace="ТУТ ССЫЛКА И ОНА ЗАМЕНЕНА!"; $msg=preg_replace($patterns, $rеplace, $msg); print($msg); ?>
Так запихай моё решение в свою регулярку. Вот тебе справка по регуляркам http://www.php.su/articles/?cat=regexp&page=008
Ну раз с регуляторами так тяжко можно так: Код (PHP): if (filter_var($url, FILTER_VALIDATE_URL) !== false && preg_match($url, '/Исключение|Второе исключение/') == false) { // OK } else { // EROR }
У меня нету $url. У меня есть лишь $msg в котором не только ссылки но вперемешку текст знаки препинания и т.д. Можно мой пример прям скопировать и туда внедрить исключение? Либо может как-то мой шаблон просто подправить?