Поиск URL-адресов из текстовой строки через php и regex?

Я знаю, что название вопроса выглядит очень повторяющимся. Но некоторые из решений я не нашел здесь.

Мне нужно найти URL-адреса в текстовой строке:

$pattern = '`.*?((http|https)://[\w#$&+,\/:;=?@.-]+)[^\w#$&+,\/:;=?@.-]*?`i'; if (preg_match_all($pattern,$url_string,$matches)) { print_r($matches[1]); } 

используя этот шаблон, я смог найти URL-адреса с http:// и https:// которые являются okey. Но у меня есть пользовательский ввод, где люди добавляют URL-адрес, например, www.domain.com даже domain.com

Итак, мне нужно сначала проверить строку, где я могу заменить www.domain.com domain.com общим протоколом http:// перед ними. Или мне нужно придумать более хороший образец?

Я плохо разбираюсь в регулярном выражении и не знаю, что делать.

Моя идея сначала найти URL-адреса с http:// и https:// помещать их в массив, а затем заменить этот url пробелом ("") в текстовой строке, а затем использовать для него другие шаблоны. Но я не уверен, какой шаблон использовать.

Я использую этот $url_string = preg_replace($pattern, ' ', $url_string ); но удаляет, если есть какой-либо URL www.domain.com или domain.com между двумя действительными URL с http:// или https://

Если вы можете помочь, это будет здорово.

Чтобы сделать вещи более ясными:

Мне нужен шаблон или какой-то другой метод, где я могу найти все URL-адреса в текстовом укусе. пример URL:

  1. domain.com
  2. www.domain.com
  3. http://www.domain.com
  4. http://domain.com
  5. https://www.domain.com
  6. https://domain.com

благодаря! 5.

 $pattern = '#(www\.|https?://)?[a-z0-9]+\.[a-z0-9]{2,4}\S*#i'; preg_match_all($pattern, $str, $matches, PREG_PATTERN_ORDER); 

Я не уверен, правильно понял, что вам нужно, но вы можете использовать что-то вроде этого:

 preg_match('#^.+?://#', $url); 

найти, есть ли протокол, указанный в строке, и если не просто добавить http://