[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как выгрести большие текстовые блоки
sx000
Привет всем.
Не могу сообразить забрал я вот в перменную страницу загруженную, теперь мне надо определить есть ли на ней блоки текстов более чем состоящие из набора слов (подряд) => чем N слов в конфиге. Регепсы блин плохо знаю дп и понимаю может подскажет кто?



Спустя 4 минуты, 48 секунд (28.08.2010 - 13:54) FatCat написал(а):
"Блоки текста" - это содержимое <div> или что-то другое подразумевается?

Спустя 11 минут, 42 секунды (28.08.2010 - 14:06) sx000 написал(а):
не под ивам ловить не как не получиться текст может быть и в <p> скажем ... и может быть вообще без тегов в таблице скажем. Я предпологаю что логика должна быть следюущая:
Берем массив полностью с кодом html для чистоты данных брать нужно от <body.* далее смотрим где подряд идут слова, те без вкраплений тегов, исключением будут допустим теги
<b><br><и надо подумать еще какие> находим такие блоки текста и считаем в них слова, если свло больше чем N то значит открываем цикл на обработку дальнейшую
PS сори но вот так вот как то я вижу это, прошу прощения за неграмотность за ранее в программировании это мой первый скрипт smile.gif

Спустя 3 минуты, 45 секунд (28.08.2010 - 14:10) FatCat написал(а):
Цитата (sx000 @ 28.08.2010 - 15:06)
<и надо подумать еще какие>

Их до идола...
Стронг, ем, фонт, спан, а-ашьреф, а-нейм, имг, акроним, нобр... - это так, навскидку.

Спустя 4 минуты, 1 секунда (28.08.2010 - 14:14) sx000 написал(а):
да вы правы... но другого выхода я не вижу покамесь, может подскажите по другому как то ...

Спустя 4 минуты, 13 секунд (28.08.2010 - 14:18) Romms написал(а):
sx000, подожди чуть, регулярку складываю!

Спустя 1 час, 46 минут, 44 секунды (28.08.2010 - 16:05) Romms написал(а):
Есть! Правда не особо быстро будет работать, ну зато так как ты сказал smile.gif

$info2 = preg_replace("#<body>(.*?)</body>#is",'\\1',$info2); //"сохраняем всё что между тегами "боди"
$info2 = preg_replace("#<(a|b|u|i|span)(.*?)>(.*?)</\\1>#is",'\\3',$info2); //Убираем двайные тегы
$info2 = preg_replace("#<(br|img|font)(.*?)>#is",'',$info2); //убираем одинарные тегы
$info2 = preg_replace("#<!--(.+?)-->#is",'',$info2); //Убираем комменты
$info2 = preg_replace("#<(script|iframe)(\s|>)(.+?)/\\1>#is",'',$info2); //Убираем скрипты и Ифреймы
$info2 = preg_replace("#<(/(.+?)|(.+?))\b(.*?)>#is",'<\\1>',$info2); //Убираем параметры в оставшигся тегах

preg_match_all("/(>|^)(([^<\/]+?)(\b([[:alnum:]]+)\b)(.*?)){3,}</sm", $info2, $matches); //Ищим слова
echo count($metches[0]);//Количество таких блоков

$info2 - содержания входной страницы

если написать так:
    foreach ($matches[0] as $index => $value)
echo '<br/>'.$index.' - "'.(htmlspecialchars($value)).'"';
То увидишь что он "хватает"
если он взял тег, не парся он их не считает(можешь проверить сменив регулярку на /(([^<\/]+?)(\b([[:alnum:]]+)\b)(.*?))/sm
Ну как не считает... он просто не берет часть текста(слово вместе с тегом) если там нету СЛОВА)
Только не забывай что нужно вписать полный список ТЕГОВ!!!

PS. смени число 3 на нужное тебе число слов в блоке (N)(в последней регулярке)

Спустя 9 минут, 43 секунды (28.08.2010 - 16:14) sx000 написал(а):
Romms большое спасибо щас буду копать.... biggrin.gif

Спустя 7 минут, 2 секунды (28.08.2010 - 16:22) Romms написал(а):
Цитата
Romms большое спасибо щас буду копать.... biggrin.gif

пожалуйста, пол дня потратил, но помог! cool.gif
Если надо что-то объяснить - обращайся!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.