здесь работает нормально:
preg_match_all('%<a target="_blank" href="(.*?)">%', $page, $result, PREG_PATTERN_ORDER);
$s = $result[1];
а здесь шаблон не работает:
preg_match_all('%<p class="nnn" >(.*?)</p>%', $page, $resultt, PREG_PATTERN_ORDER);
$an = $resultt[1];
вот сам html фрагмента ,привожу без форматирования,как есть,только для краткости текст сокращу:
<P class="nnn" >
<B>текст</B>
</P>
Подскажите пожалуйста в чем ошибка.
Спустя 6 минут, 18 секунд (18.01.2011 - 18:28) twin написал(а):
Модификаторы is поставь
Спустя 1 минута, 1 секунда (18.01.2011 - 18:29) ZSH написал(а):
preg_match_all('%<p class="nnn" >(.*?)</p>%i', $page, $resultt, PREG_PATTERN_ORDER);
в паттерне p-маленькое, а в HTML большое
в паттерне p-маленькое, а в HTML большое
Спустя 45 минут, 52 секунды (18.01.2011 - 19:15) spartiat написал(а):
Спасибо ребята что откликнулись.Модификаторы я перепробовал,результат тот же ,такой вот шаблон:
попробуйте сами тот код штмл что я привел.
ps:twin примите благодарность за классный сайт irbis team,много-много я у вас почерпнул ;)
'%>(.*?)</%'
работает ,но естественно вфдергивает вместе с тем что надо кучу мусора,а с модификаторами и без,с большой и маленькой "P" нет.попробуйте сами тот код штмл что я привел.
ps:twin примите благодарность за классный сайт irbis team,много-много я у вас почерпнул ;)
Спустя 1 минута, 50 секунд (18.01.2011 - 19:16) DedMorozzz написал(а):
уверен, что модификатор "s" имеет место быть? Симптомы очень похожи, когда без него
Спустя 6 минут, 19 секунд (18.01.2011 - 19:23) DedMorozzz написал(а):
$a = ' <P class="nnn" >
<B>текст</B>
</P>';
preg_match_all('#<p.*?>(.*?)</p>#is',$a,$arr);
echo htmlspecialchars($arr[1][0]);
Спустя 9 минут, 23 секунды (18.01.2011 - 19:32) spartiat написал(а):
DedMorozzz
Спасибо,так код работает.Но почему не работает когда указываю класс:
Без этого ,код работает и с теми блоками которые имеют другой класс и которые не нужны.
Можноли это учесть?
Спасибо,так код работает.Но почему не работает когда указываю класс:
class="nnn"?
Без этого ,код работает и с теми блоками которые имеют другой класс и которые не нужны.
Можноли это учесть?
Спустя 35 минут, 40 секунд (18.01.2011 - 20:08) DedMorozzz написал(а):
$a = ' <P class="nnn" >
<B>текст</B>
</P>';
preg_match_all('#<p class=(\'|")nnn\\1.*?>(.*?)</p>#is',$a,$arr);
echo htmlspecialchars($arr[2][0]);
Мона упростить <p class=(\'|")nnn\\1 до <p class="nnn"
Но это будет менее универсально. Сейчас не важно в каких кавычках nnn стоит, хоть в одинарных, хоть в 2х будет работать.
Заметь, если уберёшь условие с кавычками - номер массива сдвинется на 1
Спустя 13 минут, 19 секунд (18.01.2011 - 20:21) spartiat написал(а):
DedMorozzz
Огромное благодарю!Не первый раз выручаете!
Все работает.Узнал сегодня много нового о регулярках!
Огромное благодарю!Не первый раз выручаете!
Все работает.Узнал сегодня много нового о регулярках!
Спустя 27 минут, 13 секунд (18.01.2011 - 20:48) spartiat написал(а):
Еще один вопрос касаемо данного примера :как почистить сразу все значения массива от тегов и пробелов?Мое
$an = trim ( strip_tags($resultt[2]));не работает :(
Спустя 9 минут, 47 секунд (18.01.2011 - 20:58) DedMorozzz написал(а):
spartiat
покажи весь код. Ибо в примере, котоырй последний кинул, последнюю строчку заменил на:
покажи весь код. Ибо в примере, котоырй последний кинул, последнюю строчку заменил на:
echo htmlspecialchars(strip_tags($arr[2][0]));И всё норм работает!
Спустя 13 минут, 22 секунды (18.01.2011 - 21:11) spartiat написал(а):
$page = ' <P class="nnn" >
<B>текст</B>
</P>
<P class="nnn" >
<B>текст2</B>
</P>
<P class="nnn" >
<B>текст n</B>
</P>
';
preg_match_all('#<p class=(\'|")nnn\\1.*?>(.*?)</p>#is', $page, $resultt, PREG_PATTERN_ORDER);
$an = =htmlspecialchars(strip_tags($resultt[2][0]));
echo '<pre>';
print_r($an);
echo '</pre>';
оно работает ,но выводит только один елемент масива.
даже вот полный вариант:
$page = ' <P class="nnn" >
<B>текст</B>
</P>
<a target="_blank" href="aaa">
<P class="nnn" >
<B>текст2</B>
</P>
<a target="_blank" href="aaa2">
<P class="nnn" >
<B>текст n</B>
</P>
<a target="_blank" href="aaa n">';
preg_match_all('#<p class=(\'|")nnn\\1.*?>(.*?)</p>#is', $page, $resultt, PREG_PATTERN_ORDER);
$an =htmlspecialchars(strip_tags($resultt[2][0]));
preg_match_all('%<a target="_blank" href="(.*?)">%', $page, $result, PREG_PATTERN_ORDER);
$s = $result[1];
echo '<pre>';
print_r($an);
echo '</pre>';
echo '</br>';
echo '<pre>';
print_r($s);
echo '</pre>';
В принципе главная задача избавить строки в массиве от пробелов в начале и конце строк,
но вот даже просто
$an =trim($resultt[2]);работать не хочет,хотя так
$an = $resultt[2] ;
echo '<pre>';
print_r($an);
echo '</pre>';
весь массив прекрасно выводится.
Спустя 20 минут, 38 секунд (18.01.2011 - 21:32) DedMorozzz написал(а):
если будет массив тогда в цикле прогоняй:
preg_match_all('#<p class=(\'|")nnn\\1.*?>(.*?)</p>#is', $a, $res);
for($i=0;$i<count($res[2]);$i++){
echo htmlspecialchars(strip_tags($res[2][$i]))."<br />";
}
Спустя 2 минуты, 34 секунды (18.01.2011 - 21:35) inpost написал(а):
добавь ещё модификатор u, для работы с UTF-8.
Спустя 18 минут, 1 секунда (18.01.2011 - 21:53) spartiat написал(а):
Цитата |
если будет массив тогда в цикле прогоняй: preg_match_all('#<p class=(\'|")nnn\\1.*?>(.*?)</p>#is', $a, $res); for($i=0;$i<count($res[2]);$i++){ echo htmlspecialchars(strip_tags($res[2][$i]))."<br />"; } |
Допер !
Спасибо DedMorozzz!Ты ас!
Рабочий вариант:
Спасибо DedMorozzz!Ты ас!
Рабочий вариант:
preg_match_all('#<p class=(\'|")nnn\\1.*?>(.*?)</p>#is', $a, $res);
for($i=0;$i<count($resultt[2]);$i++){
$an[] = trim(htmlspecialchars(strip_tags($resultt[2][$i])));
}
echo '<pre>';
print_r($an);
echo '</pre>';
Спустя 13 минут, 40 секунд (18.01.2011 - 22:06) spartiat написал(а):
Все допер!Огромное благодарю!Рабочий вариант:
preg_match_all('#<p class=(\'|")nnn\\1.*?>(.*?)</p>#is', $a, $res);
for($i=0;$i<count($resultt[2]);$i++){
$an[] = trim($resultt[2][$i]);
}
echo '<pre>';
print_r($an);
echo '</pre>';