Помогите при помощи регулярного выражения создать массив ссылок http:// , www Код (Text): $text = "dfsdfdfdfdfs dsffsdd http://site1.com fdsfdgfdgfdgfg dfsdfdfdfdfs dsffsdd www.site2.com fdsfdgfdgfdgfgdfsdfdfdfdfs dsffsdd http://site3.com fdsfdgfdgfdgfg dfsdfdfdfdfs dsffsdd http://site4.com fdsfdgfdgfdgfg";
результат тот же - т.е Код (Text): $text = preg_match('/(http\:\/\/|www\.)[a-z0-9\-]+\.[a-z]{2,4}/iu' , $text, $linkArr); linkArr[0] = http://site1.com linkArr[1] = http:// linlArr[2] = "" наверное запрос не правильный.
PHP: <?php $text = "dfsdfdfdfdfs dsffsdd [url=http://site1.com]http://site1.com[/url] fdsfdgfdgfdgfg dfsdfdfdfdfs dsffsdd [url=http://www.site2.com]www.site2.com[/url] fdsfdgfdgfdgfgdfsdfdfdfdfs dsffsdd [url=http://site3.com]http://site3.com[/url] fdsfdgfdgfdgfg dfsdfdfdfdfs dsffsdd [url=http://site4.com]http://site4.com[/url] fdsfdgfdgfdgfg"; preg_match_all('/(http\:\/\/|www\.)[a-z0-9\-]+\.[a-z]{2,4}/iu', $text, $matches); echo '<pre>'; print_r($matches); echo '</pre>';
кстати выражение кривоватое вон нормальное кому надо '(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)' '([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)'
BMWSauber обоснуй чем оно "кривоватое" и чем вышеприведенное лучше, исходя из поставленной задачи в начале темы. иначе ололо только.
ни кого обидеть не хотел, но при запросе к более сложным ссылкам оно обрезает половину строки. Другая просьба, помогите пожалуйста скомпоновать в одно регулярное выражение 3 т.е http , www. и @ Код (Text): preg_match_all('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)', $fr, $httpArr); preg_match_all('(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)', $fr, $wwwArr); preg_match_all('([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})', $fr, $mailArr); чтоб получался один массив "$matches" а не 3.
Дело было ночью, делать было "вообще работы по горло, но так сильно хотелось отвлечься"... Вобщем только что наваял. Из того, что я проверял - хавает всё. Но, это, конечно мега нубский регэксп, так что строго не судите. PHP: <?php preg_match_all('#(?:'. '(?:(?:http|https|ftp){1}:\/\/)?(?:www\.|[a-z0-9\-_]+(?:\.|@))*(?:[a-z0-9][a-z0-9_\-]*\.)+(?:[a-z][a-z]*){1}(?:\:[0-9]{1,5})?(?:\/)?'. // [url=https://www-2.vasya.rambler.info:88/]https://www-2.vasya.rambler.info:88/[/url] '(?:[a-z0-9][a-z0-9_\-]*\/)*'. // [url=https://www-2.vasya.rambler.info/broma/getto/kisk/]https://www-2.vasya.rambler.info/broma/getto/kisk/[/url] '(?:[a-z0-9][a-z0-9_\-%]*\.[a-z0-9]+)?'. // [url=https://www-2.vasya.rambler.info/broma/getto/kisk/superfile.ps2]https://www-2.vasya.rambler.info/broma/ ... erfile.ps2[/url] '(?:\?{1}(?:[a-z0-9][a-z0-9_\-]*)\=(?:[a-z0-9_\-%]+)?'. // [url=https://www-2.vasya.rambler.info/broma/getto/kisk/superfile.ps2?pros23=43Rew%20ewewf]https://www-2.vasya.rambler.info/broma/ ... ew%20ewewf[/url] '(?:&{1}(?:[a-z0-9][a-z0-9_\-]*)\=(?:[a-z0-9_\-%]+)?)*)?'. // [url=https://www-2.vasya.rambler.info/broma/getto/kisk/superfile.ps2?pros23=43Rew%20ewewf&efwewf=23f2ew]https://www-2.vasya.rambler.info/broma/ ... ewf=23f2ew[/url] ')#i', $in, $arr); ?>
уважаемый апельсин! я попросил на меня не обижаться! Если не верите мне на слово попробуйте сами! Весь код: Код (Text): <? $file = $_GET['path']; getLinks($file); //использование функции не обязательно, приведено для демонстрации. //код "выдергивает" ссылки сз любого файла, поэтому проверка на валидацию не используется //в случае необходимости проверки на целостность xml ниже приведен код xml парсера отлавливающий ошибки. //при помощи регулярных выражений ищу ссылки http и www, а также адреса эл почты. //код немного грамоздок изза использования 3 рег выражений. function getLinks ($file) { $fh = fopen($file, "r") or die("Can't open file!"); $fr = fread($fh, 20000000); fclose($fh); preg_match_all('/(http\:\/\/|www\.)[a-z0-9\-]+\.[a-z]{2,4}/iu', $fr, $httpArr); /* preg_match_all('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)', $fr, $httpArr); preg_match_all('(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)', $fr, $wwwArr); preg_match_all('([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})', $fr, $mailArr); */ echo "<br><b>Ссылки! </b>"; echo "<br>-------------------------------------------"; echo "<br><i>http:</i><br>"; echo "-------------------------------------------"; for ($i=0; $i< count($httpArr[0]); $i++) { echo '<pre>'; echo "без форматирования<br>"; echo $httpArr[0][$i]."<br>"; echo '</pre>'; //просто переводим в другую переменную для простоты чтения. $explString = $httpArr[0][$i]; //переводим строку адреса(ссылки) в масив в котором: // $explArrDblSlash[0] есть - префикс "http://" //а $explArrDblSlash[1] - остальной адрес $explArrDblSlash = explode ("//", $explString); //тестовая проверка if (count($explArrDblSlash) >= 2) { //т.к. нам нужен только основной адрес, то все после / игнорируется $explArrSlash = explode ("/", $explArrDblSlash[1]); //создаем полную строку адреса на домашнюю страницу $addr $addr = $explArrDblSlash[0]."//".$explArrSlash[0]; echo '<pre>'; echo "<br>ссылка на домашнюю страницу!<br>"; echo '<a href="'.$addr.'">'.$addr.'</a>'; echo '</pre>'; } else {echo "ПРОВЕРКА ТЕСТ!!!!";} echo "-------------------------------------------"; } //то же самое только для www echo "<br><i>www</i><br>"; echo "-------------------------------------------"; for ($i=0; $i< count($wwwArr[0]); $i++) { echo '<pre>'; echo "без форматирования<br>"; echo $wwwArr[0][$i]."<br>"; echo '</pre>'; //просто переводим в другую переменную для простоты чтения. $explString = $wwwArr[0][$i]; //переводим строку адреса(ссылки) в масив в котором: // $explArrDblSlash[0] есть - префикс "http://" //а $explArrDblSlash[1] - остальной адрес $explArrDblSlash = explode ("www", $explString); //тестовая проверка if (count($explArrDblSlash) >= 2) { //т.к. нам нужен только основной адрес то все после / игнорируется $explArrSlash = explode ("/", $explArrDblSlash[1]); //создаем полную строку адреса на домашнюю страницу $addr $addr = "www".$explArrSlash[0]; echo '<pre>'; echo "<br>ссылка на домашнюю страницу!<br>"; echo '<a href="'.$addr.'">'.$addr.'</a>'; echo '</pre>'; } else {echo "ПРОВЕРКА ТЕСТ!!!!";} echo "-------------------------------------------"; } //для e-mail все проще. echo "<br><i>mail</i><br>"; echo "-------------------------------------------"; for ($i=0; $i< count($mailArr[0]); $i++) { echo '<pre>'; echo $mailArr[0][$i]."<br>"; echo '</pre>'; echo "-------------------------------------------<br>"; } } //Парсер XML, на всякий случай echo "<br><br><b>Парсер! приведен для примера!</b><br>"; function startElement($parser, $name, $attrs) { echo "Element: $name<br>"; // имя элемента foreach ($attrs as $attr => $value) { // выводим имя атрибута и его значение echo 'Attribute: '.$attr.' = '.$value.'<br>'; } } function endElement($parser, $name) { } $xml_parser = xml_parser_create(); xml_set_element_handler($xml_parser, "startElement", "endElement"); xml_set_character_data_handler($xml_parser, "stringElement"); xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0); if (!($fp = fopen($file, "r"))) { die("Can't open XML input"); } while ($data = fgets($fp)) { if (!xml_parse($xml_parser, $data, feof($fp))) { echo "<br>XML Error: "; echo xml_error_string(xml_get_error_code($xml_parser)); echo " at line ".xml_get_current_line_number($xml_parser); break; } } function stringElement($parser, $str) { if (strlen(trim($str)) > 0) { echo 'String: '.$str.'<br>'; // выводим строку } } xml_parser_free($xml_parser); //*** конец парсера ?> файл XML! Код (Text): <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <response> <books> <book> <title> Building Reponsive Web Applications with AJAX and PHP www.ajax.ru </title> <isbn> 1-904811-82-5 </isbn> </book> <book> <title> Beginning PHP 5 and MySQL E-Commerce: From Novice to Professional problem_net@ukr.net </title> <isbn> http://otvety.google.ru/otvety/thread?tid=1e0cf92fa021e9f4 </isbn> <isbn> www.otvety.google.ru/otvety http://www.ukr.net/freemail </isbn </book> </books> </response> index думаю прикрутите сами. результат при вашем рег выражении http://otvety.goog из http://otvety.google.ru/otvety/thread?t ... 2fa021e9f4 при использовании строки приведеной мною выше все отображается нормально.... еще раз прошу на меня не обижаться...... лучше помогите с постом выше.
что ты просил вначале этой темы? а вот что: ни в одной ссылке из примера нет строки с параметрами "?id=423424" и др. Потому и регулярку писал без учета этого. И в этом кривоватость не регулярного выражения, а кривое поставление задачи. Еще раз повторю - что просил вначале, то и получил. Я не должен продумывать все то, чего нет в примере.
апельсин ок... )))) И все таки? ))))) Johnatan - вроде редактированный пашет, буду завтра пробовать..... всем спасибо....