Я перепробовал этот вопрос, потому что не нашел хорошего ответа.
У меня есть строка, которая может содержать текст с URL-адресами.
Мне нужна функция, чтобы удалить все URL-адреса из этой строки и просто оставить текст.
например, строка может содержать следующее:
1) Эй, смотрите здесь: http://xxx.xxx/545df5 это хорошо!
2) Эй, смотрите здесь: http://www.xxx.xxx/545df5 это хорошо!
3) Эй, смотрите здесь: xxx.xxx/545df5 это приятно!
4) Эй смотрите здесь: www.xxx.xxx/545df5 это приятно!
благодаря
Регулярное выражение для URL и как использовать регулярное выражение с php должно помочь вам.
То, что вам действительно нужно, – это сплошное регулярное выражение, чтобы найти URL-адреса в строке, и вы можете предварительно создать этот шаблон ничем. Я могу сказать вам, что отслеживание такого регулярного выражения непросто. В зависимости от изменений в URL-адресах, которые вы ищете (например, http: // vs https: // vs ftp: //), вы можете столкнуться с реальными проблемами, пытаясь учесть все это.
Вот страница, которую я нашел хорошим началом .
Regex – это путь, который обсуждался ранее. Найти один из них не так уж сложно (goge: url regex pattern). Один пример вернулся здесь.
http://www.geekzilla.co.uk/View2D3B0109-C1B2-4B4E-BFFD-E8088CBC85FD.htm
Я также рекомендовал бы протестировать ваше регулярное выражение, используя один из многих тонких онлайн-тестировщиков регулярных выражений. Мой любимый (для не-java)
Эта функция должна это делать (при условии, что ваши строки разделены пробелом "):
function isValidURL($url) { return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url); } function cleanUpUrls($urls) { $urlArray = explode(' ',$urls); $resultArray = array(); foreach ($urlArray as $url) { if(!isValidURL($url)) { $resultArray[] = $url; } } return implode(' ',$resultArray); }