есть страничка с вот такой структурой: href="/projects/?pid=555285"> Текст1 </a> <div class="project-preview-desc"><p> Текст2 </p> <div class="project-stats"> Текст3 </div> надо подоставать в массивы текст1, текст2 и текст3, число которое после pid= может меняться. у меня был код который достает текст между двумя указанными строчками, но я его потерял... помогите плиз примерчиком, т.к на пхп третий раз смотрю за всю свою програмерскую жизнь))
то что не валидный это само собой, я ж повыкидывал все лишнее и оставил только те тэги между которыми текст нужно брать. Не совсем понятно ваше регулярное выражение... Вот как я все это понял, поправьте если что не так. /<p.*?> - это тэг <p>, понятно, только что значит .*? (подозреваю что любая последовательность символов) (.*?) - это текст который я достаю, опять же что такое .*? и что значат скобки? <\/p>/i - тэг </p>, тут я так понял, что \ нужна для экранирования /, а что такое i ? это описка?
Объясняю: .*? точка — любой символ. Звёздочка — повторять 0 и более раз. Знак вопроса означает, что звёздочка будет заглатывать все символы до первого символа > (иначе звёздочка захватит все входные данные, это называется жадный квантификатор, ещё бывает ревнивый, читайте википедию) Скобки во втором случае означают, что выражение внутри скобок попадёт в карман, из кармана можно будет потом достать нужный текст. i — регистронезависимое сравнение. Читайте мануалы!
вот что я наваял с помощью preg_match_all, но почему-то ничего не выводиться :? PHP: <?php $file = fopen ("http://www.onliner.by/", "r"); if (!$file) { echo "<p>Unable to open remote file.\n"; exit; } $array1; while (!feof ($file)) { $line = fgets ($file, 1024); preg_match_all ("/<p.*?>(.*?)<\/p>/i", $line, $array1); } echo $array1[0][0]; echo $array1[0][1]; fclose($file); ?>
$c = file_get_contents("http://www.onliner.by/"); preg_match_all ("/<p.*?>(.*?)<\/p>/i", $c, $array1); print_r($array1);
Помогите пожалуйста тоже вот с чем: Не могу составить регулярное выражение для preg_match. Делаю так: <?php $line='2,Abarth,1300 Scorpione Coupe,1968,,Rear,"1280 ccm (77,72 cubic inches)","in-line, 4-cyl",,"74.00 PS (53,72,64 kW or 72,64 HP) at 6000 Rev. per min."'; if(preg_match('/^(.*),(.*),(.*),(.*),(.*),(.*),"(.*)","(.*)",(.*),"(.*)"$/',$line,$matches)){ echo($matches[1].",".$matches[2].",".$matches[3].",".$matches[4].",".$matches[5].",".$matches[6].",".$matches[7].",".$matches[8].",".$matches[9].",".$matches[10].",".$matches[11].",".$matches[12]); }else{ echo("error"); } ?> "(.*)" не работает для "74.00 PS (53,72,64 kW or 72,64 HP) at 6000 Rev. per min.", то есть вот так <?php $line='2,Abarth,1300 Scorpione Coupe,1968,,Rear,"1280 ccm (77,72 cubic inches)","in-line, 4-cyl",'; if(preg_match('/^(.*),(.*),(.*),(.*),(.*),(.*),"(.*)","(.*)",(.*)$/',$line,$matches)){ echo($matches[1].",".$matches[2].",".$matches[3].",".$matches[4].",".$matches[5].",".$matches[6].",".$matches[7].",".$matches[8].",".$matches[9].",".$matches[10].",".$matches[11].",".$matches[12]); }else{ echo("error"); } ?> всё работает. Как обозначить текст "74.00 PS (53,72,64 kW or 72,64 HP) at 6000 Rev. per min." ? Причём вот так тоже работает: <?php $line='2,Abarth,1300 Scorpione Coupe,1968,,Rear,"1280 ccm (77,72 cubic inches)","in-line, 4-cyl",'; if(preg_match('/^(.*),(.*),(.*),(.*),(.*),(.*),"(.*)","(.*)",(.*)$/',$line,$matches)){ echo($matches[1].",".$matches[2].",".$matches[3].",".$matches[4].",".$matches[5].",".$matches[6].",".$matches[7].",".$matches[8].",".$matches[9].",".$matches[10].",".$matches[11].",".$matches[12]); }else{ echo("error"); } echo("<br/>"); $line='"74.00 PS (53,72,64 kW or 72,64 HP) at 6000 Rev. per min."'; if(preg_match('/^"(.*)"$/',$line,$matches)){ echo($matches[1].",".$matches[2].",".$matches[3].",".$matches[4].",".$matches[5].",".$matches[6].",".$matches[7].",".$matches[8].",".$matches[9].",".$matches[10].",".$matches[11].",".$matches[12]); }else{ echo("error"); } ?> В чём же может быть дело? Я понял, тут ограничение на количество выражений. А можно ли его изменить?
Re: помогите составить регулярное выражение для preg_match_a почему бы не сделать так? Код (Text): <?php $line='2,Abarth,1300 Scorpione Coupe,1968,,Rear,"1280 ccm (77,72 cubic inches)","in-line, 4-cyl",'; $matches = explode(",", str_replace('"', '', $line2)); ?> вроде и быстрее и вернее Код (Text): <?php $line='2,Abarth,1300 Scorpione Coupe,1968,,Rear,"1280 ccm (77,72 cubic inches)","in-line, 4-cyl",'; if(preg_match('/^(.*),(.*),(.*),(.*),(.*),(.*),"(.*)","(.*)",(.*)$/',$line,$matches)){ echo($matches[1].",".$matches[2].",".$matches[3].",".$matches[4].",".$matches[5].",".$matches[6].",".$matches[7].",".$matches[8].",".$matches[9].",".$matches[10].",".$matches[11].",".$matches[12]); }else{ echo("error"); } echo("<br/>");