Поиск URL-адресов из текстовой строки с помощью php и регулярного выражения? [дубликат]


На этот вопрос уже есть ответ здесь:

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

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

$pattern = '`.*?((http|https)://[\w#$&+,\/:;[email protected]]+)[^\w#$&+,\/:;[email protected]]*?`i';

    if (preg_match_all($pattern,$url_string,$matches)) {
        print_r($matches[1]);
    }

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

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

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

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

Я использую этот $url_string = preg_replace($pattern, ' ', $url_string );, но это удаляет, если какой-либо www.domain.com или domain.com URL-адрес между двумя допустимыми 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.

Author: drudge, 2011-05-25

2 answers

$pattern = '#(www\.|https?://)?[a-z0-9]+\.[a-z0-9]{2,4}\S*#i';
preg_match_all($pattern, $str, $matches, PREG_PATTERN_ORDER);
 3
Author: Adrian B, 2014-01-01 23:30:57

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

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

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

 0
Author: tjm, 2014-01-01 23:45:56