Авто   Интересная история   Искусство   Карьера   Мастер   Недвижимость   Оружие   Подольск   Реклама   «Деловой Подольск»  
Содержание   А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я

Когда и почему не следует использовать регулярные выражения

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

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

Описание проблемы поставленной на форуме было таким:
Есть некая страница, созданная в результате работы шаблонизатора, в ней присутствуют элементы типа <input type=checkbox>, авторизированный пользователь работает с этой страницей и отмечает какие-то чекбоксы <input type=checkbox checked>, после отправки формы на сервер страницы снова генерируются шаблонизатором и программист делает так, что эта страница сохраняются в кеше, причем уже с отмеченными чекбоксами.
Задача программиста:
Ему надо по результатам отправленной формы запомнить выделенные чекбоксы и при последующем обращении этого пользователя к этой странице выводить его выбор с уже отмеченными элементами.

Что он делает:
Вместо того, чтобы взять шаблон, выбрать из базы данные и на основе их отметить заново чекбоксы, прогнав шаблон через шаблонизатор, программист берет сохраненную в кеше страницу и парсит ее при помощи регулярных выражений, в зависимости от данных, которые он выбрал для данного пользователя из базы, он либо удаляет данные из страницы либо добавляет новые 'checked' в нужных местах в тексте страницы.

Его аргументация:
Так быстрее работает чем обработка первоначального шаблона.

Попробую привести свои аргументы против:
Смысл кешировать, если потом данные из кеша надо менять при помощи регулярных выражений? Кеш как раз и нужен для того, чтобы лишний раз не гонять ресурсоемкие процессы, такие как например обработка ВСЕГО текста регулярными выражениями... по нескольку раз.

Представим себе текст, в котором n символов, а также регулярное выражение, в котором
а. есть три условия выбора part1|part2|part3|
б. каждая из частей parti состоит из символьных классов, а также заданных последовательностей литералов.
в. максимальная длинна совпадения регулярного выражения равна m символов.
г. программист использовал функцию preg_replace, мы знаем принцип работы механизма регулярных выражений, а значит можем повторить его работу.

Приведу эти шаги одновременно с аргументами против подхода, который хотел применить программист, которые из них вытекают:
1. берем символ из текста с индексом 1 пытаемся применить регулярное выражение к тексту, который начинается с этого символа. Перебираем каждый символ от начального и сравниваем его с шаблоном (подходит ли).
2. следуя каждой инструкции выбора в регулярном выражении мы можем совершить максимум три выбора и перебрать m последующих символов для КАЖДОГО i-го символа текста.
3. несложно посчитать, какое количество символов будет перебрано впустую, если совпадение не будет найдено.
4. закешированный документ уже является результатом работы регулярного выражения (многие шаблонизаторы работают на регулярных выражениях) таким образом просто напросто дополнительно вызывается механизм регулярных выражений, чтобы отпарсить сырой документ-полуфабрикат, вместо того, чтобы сразу его сделать готовым за один проход.
5. если сравнить регулярные выражения, на которых работают шаблонизаторы и регулярное выражение, которое получится у нашего программиста, то сразу будет видно, что первые проще! По этой причине совпадения будут находиться быстрее.
6. Часто работа регулярных выражений в шаблонизаторе будет происходить с маленькими участками текста (не секрет, что страницы могут собираються из маленьких кусочков), а не сразу к сгенерированной странице.

Надеюсь, я смог объяснить, почему регулярные выражения, являсь мощным средством работы со строками не подходят для решения подобных глобальных задач, надо научиться ставить себе задачи и уметь решать ее несколькими способами, тогда у вас появится выбор в сторону лучшего способа решения. Регулярные выражения – это всего лишь один из многих способов, но никак не панацея.

В заметке описан случай, когда человек, знал как пользоваться регулярными выражениями, а также знал, как использовать в своей работе шаблонизатор, т.е. у него был выбор, он просто не мог остановиться на одном из вариантов. Есть категория начинающих программистов, которая увидев, кучу значков, при помощи которых решаются много проблем со строками, воздвигают себе кумира в виде статуи этому «волшебному средству» и даже не догадываются, что их задача по замене слова на другое слово в строке решается простой функцией str_replace(). Не понимая, как работают регулярные выражения, они приходят на форум и спрашивают, как заменить abcd на asdf при помощи preg_replace и очень обижаются, когда дают ссылку на str_replace в мануале на www.php.net. Это наверное самый распространенный случай неправильного применения регулярных выражений, когда их можно заменить при помощи

23/01/2006  
дополнительно
как можно оптимизировать PHP-Nuke
Отрисовка связанного дерева с помощью XSLT - как с умом использовать XSLT и XPath
Регулярные выражения.
Регулярные выражения. Часть 3
Шерлок Холмс спешит на помощь вебпрограммисту или регулярные выражения на пальцах
Регулярные выражения. Часть вторая
Регулярные выражения. 1
Сверхдинамичные веб-интерфейсы
юю
юю
back home top
название
анонс:
текст:
примечание:
отправитель:   mail:

Для публикации принимаются интересные и полезные статьи, которые наверняка заинтересуют жителей города Подольска и Подольского района. Статьи размещаются в по тематическом разделам журнала: «Недвижимость», «Авто-Подольск», «История Подольска и его окрестностей», «Искусство», «Карьера», «Реклама», «Оружие», «Деловой Подольск» Наиболее интересные материалы публикуются в электронных изданиях и рассылках группы «podolsk.biz».

Подольск Адреса История Подольские Форумы Объявления Справочник Фото Журнал
Подольское городское информационное агенство podolsk.biz размещение сайтов о городе Подольск и Подольском районе. имя вида название.podolsk.biz, почтовые адреса вида название@podolsk.biz
Подольское агенство podolsk.biz

Отдел рекламы 8903 1347521

поиск по Подольску



Подольск   карта сайта   Реклама на «podolsk.biz»