Поиск 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-адреса являются:
- domain.com
- www.domain.com
- http://www.domain.com
- http://domain.com
- https://www.domain.com
- https://domain.com
Спасибо! 5.
2 answers
$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://