За последние 24 часа нас посетили 18139 программистов и 1599 роботов. Сейчас ищут 938 программистов ...

Как выгрести большие текстовые блоки

Тема в разделе "Регулярные выражения", создана пользователем sx000, 28 авг 2010.

  1. sx000

    sx000 Активный пользователь

    С нами с:
    28 авг 2010
    Сообщения:
    35
    Симпатии:
    0
    Привет всем.
    Не могу сообразить забрал я вот в перменную страницу загруженную, теперь мне надо определить есть ли на ней блоки текстов более чем состоящие из набора слов (подряд) => чем N слов в конфиге. Регепсы блин плохо знаю дп и понимаю может подскажет кто?

    По дивам ловить не как не получиться текст может быть и в <p> скажем ... и может быть вообще без тегов в таблице скажем. Я предпологаю что логика должна быть следюущая:
    Берем массив полностью с кодом html для чистоты данных брать нужно от <body.* далее смотрим где подряд идут слова, те без вкраплений тегов, исключением будут допустим теги
    <b><br><и надо подумать еще какие> находим такие блоки текста и считаем в них слова, если свло больше чем N то значит открываем цикл на обработку дальнейшую
     
  2. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    вначале удаляются все "лишние теги":
    PHP:
    1.  
    2.  
    3. <?php
    4.  
    5. $text =  <<<EOT
    6. <div id="abcd">here <b>should</b> <p>be some</p> text</div>
    7. EOT;
    8.  
    9. # <b><i><br><span>
    10. $text = preg_replace('#</?(?:b|i|br|span)[^>]*>#sUi', '', $text);
    11.  
    12. echo htmlspecialchars($text);
    13.  
    14. ?>
    а вот дальше можно смотреть по ситуации - то ли парсить через DOM XML,
    то ли дальше регулярками.
    Только нужно иметь в виду, что поиск регулярками не ищет вложенные запросы.

    Например, что делать со следующим текстом?
    <div> bla-bla-bla <div> internal bla </div> bla-bla-bla </div>

    при попытке найти то, что заключено между открывающим и закрывающим тегами div,
    будет найдена следующие строки (при нежадных квантификаторах):
    1. <div> bla-bla-bla <div> intenal bla </div>
    2. <div> intenal bla </div>
     
  3. sx000

    sx000 Активный пользователь

    С нами с:
    28 авг 2010
    Сообщения:
    35
    Симпатии:
    0
    ну в теории надо теги раскидать те кторые могут встерчаться в блоках, див думаю как раз в большинстве случаев не сможет встречаться в текста хотя все зависит от длинны самого текста в новом диве внутри длинного текста, ну какое то выделение и тд... задача не тривиальная :)
     
  4. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    именно, именно!
    слишком много неизвестных данных.

    Скорее всего надо будет бегать по ДОМ-дереву в поисках нужного узла.

    к лишним тегам также можно отнести <a>,<img>,<table>,<tr>,<input>,<textarea>,<select>,<form>...
    регулярка просто удаляет эти теги из текста, сам текст остаётся.