The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Регулярное выражение: Как посчитать \s не попадающие в теги ???, !*! антигерой, 14-Июл-07, 18:16  [смотреть все]
Надо посчитать пробелы и группы пробелов, не попадающих в теги, проще говоря всё вот такое:
> те пробелы, что здесь в тексте, a не в тегах <

Составил такое выражение:
preg_match_all( "/(?<=\>)([\s]{1,})(?=\<)/", $row->text, $arraymatch5, PREG_OFFSET_CAPTURE);

И оно работает, но почему-то не так какта работает. Тоесть на текст в 50К примерно - получается около 100 пробелов, что не может быть.
Где косяк ? (про ДНК я сам знаю 8-)

  • Регулярное выражение: Как посчитать \s не попадающие в теги ..., !*! A, 09:20 , 16-Июл-07 (1)
    >Надо посчитать пробелы и группы пробелов, не попадающих в теги, проще говоря
    >всё вот такое:
    >> те пробелы, что здесь в тексте, a не в тегах <
    >
    >Составил такое выражение:
    >preg_match_all( "/(?<=\>)([\s]{1,})(?=\<)/", $row->text, $arraymatch5, PREG_OFFSET_CAPTURE);
    >
    >И оно работает, но почему-то не так какта работает. Тоесть на текст
    >в 50К примерно - получается около 100 пробелов, что не может
    >быть.
    >Где косяк ? (про ДНК я сам знаю 8-)

    Не совтую решать такие проблемы регулярными выражениями. Рано или поздно вы налетите на теги типа <img alt=">" src=""> и прочую гадость. Строго говоря, грамматика тегов не является регулярной впринципе (она является контекстно-свободной) и потому регулярными выражениями не обрабатывается. Любое решение на основе регулярных выражений будет чуть лучше или чуть хуже, но никак не идеальным. По-правильному, надо парсить HTML-документ чем-нибудь.

    • Регулярное выражение: Как посчитать \s не попадающие в теги ..., !*! .org, 12:18 , 23-Июл-07 (2)
      >[оверквотинг удален]
      >>
      >>Составил такое выражение:
      >>preg_match_all( "/(?<=\>)([\s]{1,})(?=\<)/", $row->text, $arraymatch5, PREG_OFFSET_CAPTURE);
      >>
      >>И оно работает, но почему-то не так какта работает. Тоесть на текст
      >>в 50К примерно - получается около 100 пробелов, что не может
      >>быть.
      >>Где косяк ? (про ДНК я сам знаю 8-)
      >
      >Не совтую решать такие проблемы регулярными выражениями. Рано или поздно вы налетите на теги типа <img alt=">" src=""> и прочую гадость. Строго говоря, грамматика тегов не является регулярной впринципе (она является контекстно-свободной) и потому регулярными выражениями не обрабатывается. Любое решение на основе регулярных выражений будет чуть лучше или чуть хуже, но никак не идеальным. По-правильному, надо парсить HTML-документ чем-нибудь.

      Это почему же? С тегами регулярки справляются на ура, вопрос в другом, нужно ли использовать мощь регулярных выражений, для таких целей, ведь они работают на порядок медленней по сравнению с простыми строковыми функциями...


      • Регулярное выражение: Как посчитать \s не попадающие в теги ..., !*! anonymous, 03:40 , 24-Июл-07 (3)
        >Это почему же? С тегами регулярки справляются на ура, вопрос в другом,
        >нужно ли использовать мощь регулярных выражений, для таких целей, ведь они
        >работают на порядок медленней по сравнению с простыми строковыми функциями...

        Попробую перефразировать предыдущий ответ, который вам дали.  Сама грамматика html "сложнее", чем можно обработать регулярными выражениями.  Да, вы можете написать выражение, которое обработает 95% ситуаций, но когда-то вам таки встретится файл, который содержит странную конструкцию, и ваши скрипты будут выдавать не просто странные, а очень странные результаты, хоть бы до уязвимостей не дошло.

        Тем более, вспомните, насколько свободно браузеры относятся к парсингу html: иногда ну ооочень невалидные документы всё же рендерятся, и хуже того, такие документы попадаются на реальных сайтах.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру