Извлечь URL из строки с помощью PHP

Как мы можем использовать PHP для определения URL-адреса в строке и хранить их в массиве?

Это пример строки.

$text = "The text you want to filter goes here. http://google.com, https://www.youtube.com/watch?v=K_m7NEDMrV0,https://instagram.com/hellow/"; 

Я не могу использовать функцию explode потому что, если URL-адрес содержит запятую, он не даст правильных результатов.

 print_r (explode(" ",$text)); 

REGEX – это ответ на вашу проблему. Принимая ответ на объект Manipulator .. все, что ему не хватает, это исключить «запятые», чтобы вы могли попробовать этот код, который исключает их, и дает 3 отдельных URL-адреса в качестве вывода:

 $string = "The text you want to filter goes here. http://google.com, https://www.youtube.com/watch?v=K_m7NEDMrV0,https://instagram.com/hellow/"; preg_match_all('#\bhttps?://[^,\s()<>]+(?:\([\w\d]+\)|([^,[:punct:]\s]|/))#', $string, $match); echo "<pre>"; print_r($match[0]); echo "</pre>"; 

и выход

 Array ( [0] => http://google.com [1] => https://www.youtube.com/watch?v=K_m7NEDMrV0 [2] => https://instagram.com/hellow/ ) 

попробуйте использовать ниже regex

 $regex = '/https?\:\/\/[^\",]+/i'; preg_match_all($regex, $string, $matches); echo "<pre>"; print_r($matches[0]); 

Надеюсь, это сработает для вас

Вы можете попробовать Regex здесь:

 $string = "The text you want to filter goes here. http://google.com, https://www.youtube.com/watch?v=K_m7NEDMrV0,https://instagram.com/hellow/"; preg_match_all('#\bhttps?://[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))#', $string, $match); echo "<pre>"; print_r($match[0]); echo "</pre>"; 

Это дает следующий результат:

 Array ( [0] => http://google.com [1] => https://www.youtube.com/watch?v=K_m7NEDMrV0,https://instagram.com/hellow/ ) 

попробуй это

 function getUrls($string) { $regex = '/https?\:\/\/[^\" ]+/i'; preg_match_all($regex, $string, $matches); return ($matches[0]); } $urls = getUrls($string); print_r($urls); 

или

 $str = '<a href="http://foobar.com"> | Hello world Im a http://google.fr | Did you mean:http://google.fr/index.php?id=1&b=6#2310'; $pattern = '`.*?((http|ftp)://[\w#$&+,\/:;=?@.-]+)[^\w#$&+,\/:;=?@.-]*?`i'; if (preg_match_all($pattern,$str,$matches)) { print_r($matches[1]); } 

он будет работать

 $string = "The text you want to filter goes here. http://google.com, https://www.youtube.com/watch?v=K_m7NEDMrV0,https://instagram.com/hellow/"; preg_match_all('#\bhttps?://[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))#', $string, $match); echo "<pre>"; $arr = explode(",", $match[0][1]); print_r($match[0][0]); print_r($arr); echo "</pre>"; 
 $urlstring = "The text you want to filter goes here. http://google.com, https://www.youtube.com/watch?v=K_m7NEDMrV0,https://instagram.com/hellow/"; preg_match_all('#\bhttps?://[^,\s()<>]+(?:\([\w\d]+\)|([^,[:punct:]\s]|/))#', $urlstring , $result); print_r($result[0]);