Я знаю, что название вопроса выглядит очень повторяющимся. Но некоторые из решений я не нашел здесь.
Мне нужно найти 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:
благодаря! 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://