URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 5104
[ Назад ]

Исходное сообщение
"Регулярное выражение: Как посчитать \s не попадающие в теги ???"

Отправлено антигерой , 14-Июл-07 18:16 
Надо посчитать пробелы и группы пробелов, не попадающих в теги, проще говоря всё вот такое:
> те пробелы, что здесь в тексте, a не в тегах <

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

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


Содержание

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

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


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

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



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

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

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