Поиск нескольких URL-адресов в строке.

$resource = "THIS IS ABOUT WWW.JONAKCOMPUTERS.COM, HTTP://HIGHLOW.COM, AND TESTINGSERVER1.COM" 

и я хочу вытащить три URL-адреса в другую строку, которая похожа на:

  $all_urls = "JONAKCOMPUTERS.COM - HIGHLOW.COM - TESTSERVER1.COM 

Я нашел это кем-то другим:

 $pattern = '#(www\.|https?:\/\/){1}[a-zA-Z0-9]{2,}\.[a-zA-Z0-9]{2,}(\S*)#i'; preg_match_all($pattern, $string, $matches, PREG_PATTERN_ORDER); 

Но он не тянет «jonakcomputers.com» только «http: // url» или «www.url»

Извините за кепки, я просто хотел дать понять, что в конце он не чувствителен к регистру. Я всегда могу извлечь выгоду из этого. Мне нужно сделать это до загрузки страницы, так что это может быть javascript или php.

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

Спасибо всем, кто хочет помочь.

Я запустил ваш код в консоли, просто изменив имя переменной в последнем фрагменте, чтобы:

 php > $resource = "THIS IS ABOUT WWW.JONAKCOMPUTERS.COM, HTTP://HIGHLOW.COM, AND TESTINGSERVER1.COM" php > $pattern = '#(www\.|https?:\/\/){1}[a-zA-Z0-9]{2,}\.[a-zA-Z0-9]{2,}(\S*)#i'; php > preg_match_all($pattern, $resource, $matches, PREG_PATTERN_ORDER); php > var_dump($matches); array(3) { [0]=> array(2) { [0]=> string(23) "WWW.JONAKCOMPUTERS.COM," [1]=> string(19) "HTTP://HIGHLOW.COM," } [1]=> array(2) { [0]=> string(4) "WWW." [1]=> string(7) "HTTP://" } [2]=> array(2) { [0]=> string(1) "," [1]=> string(1) "," } } 

То, что вы видите в возврате preg_match, представляет собой многомерный массив w / следующий:

0: Полные матчи

1: совпадение в SubPattern 1

2: Соревнования SubPattern 2

Единственное исправление, которое я вижу, это то, что вам нужно будет немного настроить RegExp, чтобы учесть отсутствие ww или http. поэтому просто используйте это для шаблона:

 $pattern = '#(www\.|https?:\/\/)?[a-zA-Z0-9]{2,}\.[a-zA-Z0-9]{2,}(\S*)#i'; 

и ваши $ match должны теперь содержать все 3.

В текущем регулярном выражении вы полностью полагаетесь на исходный www или http для поиска URL-адресов. Если вы хотите захватить эти неполные URL-адреса, вам сначала нужно определить, что вы ищете.

Например, вы только ищите вещи, заканчивающиеся на .com, или вам также нужно будет получить «jonakcomputers.br»?

Я хотел бы внести свой вклад в дискуссию, поскольку это помогло мне прийти к такому решению. Другие, которые могут запускать тот же запрос Google, что и я, могут иметь такую ​​же проблему.

Мне нужен фрагмент кода регулярного выражения, чтобы пройти через каждый URL-адрес в тексте, очистить его и пометить его классом css (для версии jQuery для встраивания)

Эта функция принимает текст, итерации по каждому URL-адресу, который он находит (используя RegExp, опубликованный Каем )

 function find_urls($text) { $ret = ''; // The Regular Expression filter $pattern = '#(www\.|https?:\/\/)?[a-zA-Z0-9]{2,}\.[a-zA-Z0-9]{2,}(\S*)#i'; preg_match_all($pattern, $text, $matches); if (sizeof($matches) > 0) { foreach($matches[0] as $match) { if(strrpos($match,'http://') === false) { $url = '<a class="embedly" target="_blank" href="http://'.$match.'">'.$match.'</a> '; } else { $url = '<a class="embedly" target="_blank" href="'.$match.'">'.$match.'</a> '; } $text = str_replace($match,$url,$text); } } return $text; }