$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; }