Заменить точный домен на preg_replace - PullRequest
0 голосов
/ 11 июля 2020

У меня есть это регулярное выражение для preg_replace. Он заменяет все URL-адреса в данной строке.

Теперь мне нужно заменить только URL-адреса t.co. https://t.co/* и et c.

preg_replace('/\b((https?|ftp|file):\/\/|www\.)[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i', ' ', $text);

Как это сделать с preg_replace?

Ответы [ 2 ]

0 голосов
/ 11 июля 2020

Вы можете использовать preg_replace и сопоставить только указанные c URL-адреса:

\bhttps?://t\.co/\S*

Пояснение

  • \b Граница слова
  • https?:// Сопоставьте протокол с необязательными s и ://
  • t\.co Сопоставьте t.co
  • /\S* Сопоставьте / и 0+ символов без пробелов

Демо Regex

Пример кода

preg_replace('~\bhttps?://t\.co/\S*~i', ' ', $text);
0 голосов
/ 11 июля 2020

Вероятно, не самое эффективное решение, но вы можете попробовать preg_replace_callback().

Например:

preg_replace_callback('/\b((https?|ftp|file):\/\/|www\.)[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i', function ($matches) {
    $url = $matches[0];
    if (preg_match('/^((https?:)?\/\/)?(www\.)?t\.co\b/i', $url)) {
        return ' ';
    } else {
        return $url;
    }
}, $text);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...