ILoveYAnny
@ILoveYAnny

Как можно получить все ссылки из текста в виде массива?

Здравствуйте, у меня есть текст, в котором встречается ссылки без разметки, вида site.ru
и https://site.ru и site.ru, при чём как минимум название доменов могут поменяться и доменной зоны, возможно будет подписано www. и может существовать поддомен. Можно ли как-то наверняка вытащить все ссылки в массив, мб есть какая-то библиотека?

Я пытаюсь найти регуляркой, однако такая конструкция не работает:
$testLinks = "ddd site.com";
preg_match(' /^(https?:\/\/)?([\w\.]+)\.([a-z]{2,6}\.?)(\/[\w\.]*)*\/?$/', $testLinks, $matches);


А вот ели на вход подать только сайт
$testLinks = "site.com";
всё работает отлично...
  • Вопрос задан
  • 353 просмотра
Решения вопроса 2
Exploding
@Exploding
wtf?
Можно как-то наверняка вытащить все ссылки в массив, и даже есть какая-то библиотека: html_dom_parser, nokogiri:) Других не помню, эти считаются самыми лучшими

UPD:
Я так понимаю, что ссылки нужны в рамках текущего домена? Хотя, это уже ваши проблемы))
В общем, вот, как говорится "на коленке"... у Еленки)) Там уже кавычки, тримы и т.д. уже допилите если я правильно понял задачу.
$text = "слова и предложения! б ура! я копирайтером сталъ!, э, куда пошелъ!Ё----:: site.ru 1 site.ru 2 site.ru 3 ТРИ*** ХАДы или вот ВВВ гаварю надежны -> https://www.site.ru - nj;t ehf (тоже ура!).";
		$words = explode(" ", $text);
		$urls = array();
		foreach($words as $k)
			if(strstr($k, "site.ru")) $urls[] = $k;
		$urls = array_unique($urls);
		echo implode(", ", $urls);
		// site.ru, https://www.site.ru
Ответ написан
ILoveYAnny
@ILoveYAnny Автор вопроса
$text = "мой текст site.com";
preg_match_all('/(https?:\/\/)?([\w\.]+)\.([a-z]{2,6}\.?)(\/[\w\.]*)*\/?/', $text, $a);
print_r($a[0]);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
EShein
@EShein
Shein
Регулярным выражение находите url и пушите в массив.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы