Простая задача на PHP. Для примера беру Хабр. Нужно вытащить с помощью регулярок текст всех комментариев, в которых присутствует некое слово, например, "Windows". И вот тут регулярка становится жадной (даже с учетом U) - пожирает лишнего в начале текста. То есть в совпадение попадают фактически все комментарии. То есть $maches[1] будет таким: Как исправить?
Gifts Это скорее костыль, чем решение. Тем более, внутри комментария может быть фактически любой тег (ну, кроме <div class="entry-content-only">). Еще предложения?
На самом деле это невозможная задача для регулярных выражений. Держи, дальше сам Code: $pcre = ' ~ (?=<div\ class="entry-content-only">) ( <([a-z]+) [^>]*+ > (?<post> (?: [^<]*+ | <(?:img|hr|br) [^>]*+ > | (?1) )+ ) </\2> ) ~ ix ';
Хорошо. А есть какой-то способ задать множество любых строк, не содержащих подстроку <div class="entry-content-only"> ?
Честно: Code: preg_match('~^(?:[^<]++|(?!<div class="entry-content-only">)<)*$~', $string); и нечестно: Code: !preg_match('~<div class="entry-content-only>~', $string);
PHP: $data = '<div class="entry-content-only"> Коммент1 </div> <p class="reply"> <...> <div class="entry-content-only"> Коммент2 </div> <...> <div class="entry-content-only"> Коммент 3 со словом Windows </div>'; if (preg_match_all('~<div class="entry-content-only">([\s\S]+?)</div>~i', $data, $out)) { $filtered_out = array_filter($out[1], create_function('$var', 'return is_numeric(stripos($var, "windows"));')); }
astrologer В чем тогда подвох? Почему нельзя воспользоваться этим и написать регулярку вроде #<div class="entry-content-only">([множество_без_entry-content-only]*Windows[множество_без_entry-content-only]*)</div>#sU ?
Code: <?php $html = ' <div>junk</div> <div class="entry-content"> <div class="entry-content-only">В чем конкретно <i><b>Windows</b></i> стандарт то? </div> </div> <div>junk</div> <div class="entry-content"> <div class="entry-content-only"> Прежде чем пытаться что то оспорить или навязать</div> </div> <div>junk</div> <div class="entry-content"> <div class="entry-content-only"> Углубимся в историю и вспомним что нам <i>назявывали</i></div> </div> <div>sudden windows junk</div> <div class="entry-content"> <div class="entry-content-only">"Виндоус это не стандарт, не смешите ИТишников". </div> </div> <div>junk</div> <div class="entry-content"> <div class="entry-content-only"> <div>пытающийся <b>подрожать</b> и уметь <i>тоже</i> что Windows. </div> </div> </div> '; preg_match_all('~ <div\ class="entry-content-only"> (?: [^<w]++ | (?!<div\ class="entry-content-only">) < | (?!windows) w )* windows (?: [^<]++ | (?!<div\ class="entry-content-only">) < )*? </div> ~ ix ', $html, $matches); print_r($matches); Так? Оно будет ломаться, как и #1574 на вложенных <div> и на не вложенных тоже, правильного разбора, разумеется, не происходит.
Помогите спарсить значение contacthome.cfm? PHP: <div class="tabContainer"><a href="https://www.magnetmail.net/contacts/contacthome.cfm?d=962005005260811">Contacts</a></div> В данном примере оно равно d=962005005260811
Пытался декодировать подобный скрипток http://pastebin.com/1TBYVsB5 , но проблема возникла на старте - не соображу как регуляркой исполнить base64 и записать уже строку. пробовал сделать подобное. PHP: $f = file_get_contents('script.txt'); echo preg_replace('/base64_decode(.*?\))/e', 'base64_decode(\\1)', $f); не выходит.Модификатор e позволяет же код выполнять.
PHP: echo preg_replace_callback('/base64_decode\((.*?)\)/is',create_function('$t','return base64_decode($t[1]);'),str_replace("' .'",'',$text));
помогите написать регулярку.. есть структура страницы : PHP: <td HEIGHT=30> <DIV class="display gr1"><span><img src="http://www.site.ru/img/icon_cat_0.gif" border="0"></span><A class=menu_link title="Автомобили" href="javascript:void(null);">Автомобили</A> </DIV> <DIV class=menu_content id=submenu1> <DIV><A title="Автозапчасти для грузовых автомобилей" href="cat/komp2/page0.html">Автозапчасти для грузовых автомобилей</A></DIV> <DIV><A title="Автозапчасти – производство, продажа" href="cat/komp3/page0.html">Автозапчасти – производство, продажа</A></DIV> <DIV><A title="Автокосметика" href="cat/komp4/page0.html">Автокосметика</A></DIV> </DIV> </td> То есть сначала категория, потом суб категория.. Я пытаюсь сначала вытащить все блоки категория+суб категория. а потом из нее вытащить название категории и данные суб. PHP: $text = ccurl("http://site.ru",""); // в итоге в text текст веб страницы. 100% есть preg_match_all('#<td HEIGHT=30>(.*?)</td>#',$text,$m); // получаем в $m блоки которые потом будем парсить print_r($m); Но массив пустой... вроде что может быть неправильно в регулярке вытащить данные между двумя ТД ? пробовал поразному
Народ, не подскажите регулярку чтобы заменить все ссылки на значение из href т.е. на входе чтото типа Code: <tag><a href="DATA1" other_data>Text</a><tag> <tag><a href='DATA2'>Text</a><tag> на выходе получить Code: <tag>DATA1<tag> <tag>DATA2<tag> т.е. всю ссылку заменить на значение из href. При этому данные могут быть как в кавычках так и в апострофах. также ссылка может начинаться на одной строке а заканчиваться на другой. типа Code: <a href="zzz" param="val"> Info </a> т.е. вообще идея такая: нужно убрать из текста все теги но при этому на месте убранного тега <a> чтобы остались на данные внутри которые него, а ссылка
-=Zhenek=- символ точка без модификаторов соответствует любым символам кроме перевода строки, соответственно имея многострочный текст - получить его не получится. Используйте [\s\S] или же модификатор m slesh PHP: $data = '<tag><a href="DATA1" other_data>Text</a><tag> <tag><a href=\'DATA2\'>Text</a><tag>'; echo preg_replace('~<a[^<>]+href=([\'"])([^\\1]+)\\1[^<>]*>[\s\S]*?</a>~i', '\\2', $data);
Помогите плиз составить регулярку. Вот кусочек. Code: <a href="http://www.russian.language.ru/test.htm" target="_blank" class="l noline" onmousedown="return rwt(this,'','','','1','AFQjCNE_sDMliZLmfL9c3N-53stLeUXWCw','','0CCYQFjAA')">Study Russian in Russia: Online Russian <em>Test</em></a> это один резултьтат из выдачи гугла. таких много причём вокруг ещё куча текста. Я пишу парсер url, помогите плиз регулярку сделать. чтобы была 1) полная ссылка типа http://www.russian.language.ru/test.htm 2) хост www.russian.language.ru
Sc0rpi0n PHP: <?php $str = file_get_contents("http://www.google.com/search?q=your+query"); preg_match_all('#<h3 class="r"><a href="(http://(.*)\/.*)".*</a></h3>#U', $str, $match); for ($i=1; $i<=2; $i++){ print_r($match[$i]); } ?>
Помогите с парсингом(Пожалуйста очень надо) <div class="popup-box" id="DirectLinks"> <div class="popup-box-btm"> <i>Ваши ссылки <br>для скачивания:</i> <div class="butonz"> <span class="size" title="Размер файла"><b>1 407 Мб</b></span> <a href="#" class="copy" id="1314675559" title="нажмите, чтобы скопировать эту ссылку в буфер обмена">скопировать</a> <a href="http://78.140.178.88/download50/let2309/3836.37e657aaec1bf459bec537349136_1/Let.the.Bullets.Fly.HDRip.avi" class="dwnld" title="нажмите, чтобы начать скачивание в браузере">скачать</a> </div> <span>http://78.140.178.88/download50/let2309/3836.37e657aaec1bf459bec537349136_1/Let.the.Bullets.Fly.HDRip.avi</span> </div> <img src="images/pop-awr.gif" alt="" /> </div> С етого кода нужно спарсить вот ету ссылку: http://78.140.178.88/download50/let2309/3836.37e657aaec1bf459bec537349136_1/Let.the.Bullets.Fly.HDRip.avi И вот ети цифры :1 407 Мб Всё вывести в две переменные!Спасибо