Нужно вытаскивать некие данные из текстовых строк. Есть 2 варианта, либо сделать это регуляркой (будет меньше кода), либо сделать это strpos() и substr() (кода будет по больше) Часто встречаю то, что регулярку не особо жалуют, но только не совсем понимаю по какой причине?
Любая регулярка это дополнительная нагрузка на сервер. Надо чётко представлять задачи для которых они были придуманы. А то некоторые лепят их куда попало. Грубо говоря, там где можно решить задачу без регулярнок, там они не нужны. Опять же без фанатизма. А то увлёкшись можно изобрести свои регулярки
смотря какие данные и что нужно вытащить. нужно решать по задаче. регулярки ругают те кто неумеет ими правильно пользоваться. это один из инструментов, очень мощный и гибкий. их код проверен годами и миллионами программистов. внутри они оптимизированы настолько, что тормозов никто не чувствует(по сравнению с примитивными строковыми функциями, ибо эти функции тоже нужно правильно уметь применить, чтоб алгоритм разбора, в итоге, был быстрее регулярки)
1) "Примитивные строковые функции" работают на Си. 2) При их использовании, ты либо явно задаешь номера позиций, по которым нужно работать, либо поиск конкретных символов, которые выполняются за один проход. 3) Они не юзают дополнительные библиотеки, работают по факту вызова, являются частью ядра. Далее, регулярки: 1) "Оптимизированные регулярки" на самом низком уровне упираются в те же Сишные функции, что и "примитивные строковые функции". 2) При использовании не здаются явно номера позиций, либо конкретные символы (в общем случае), поиск ведется посредством довольно хитровыбоенной логики, а еще есть жадные квантификаторы, да. 3) Для работы требут компиляцию, с последующим кэшированием, покуда компиляция регулярки - процесс не дешевый. Кроме того, для работы требуют отдельный внешний модуль. Говорить, что регулярки быстрее строковых функций - все равно, что говорить, что PHP может быть быстрее, чем C. Дополнительная сложная логика - это всегда оверхед, всегда. Особенно учитывая то, как работают регулярки в плане логики. Они позволяют делать очень сложные вещи в одну строку кода, и за это надо платить свою цену. Чисто физически не могут они быть быстрее нативных функций. Даже когда на вход подается простой паттерн, а не регулярка.
На одном сервере под пых можно миллионы держать. Притом он легко масштабируется. Писать нужно красиво и понятно. Экономить на мелочах не стоит.
Только суть в том, что наоборот, чтобы алгоритм был медленнее и дороже по памяти, чем у регулярки, нужно уметь ппц неправильно применить нативы. --- Добавлено --- Миллионы чего? Суммарных посещений за год? Запросов в секунду?
те ты хочешь сказать, что, берем к примеру средненькую по сложности регулярку с несложным шаблоном динамической длины, с опережающей и ретроспективной проверкой хотя бы. даём сотне средних программистов написать альтернативу ей на нативных функциях. и ты считаешь что все они напишут более быстрый и более экономный по памяти код? серьезно?
вот так и создали всеми известный porno-wordpress --- Добавлено --- Я злой на регулярок, дабы хочу увидеть примеры тормознутых функций. Сделаю закладку и лайк с меня.
@MouseZver Вордпрес тормозит потому что бд в топку тысячи запросов каждый пытается создать свою таблицу а оптимизации никакой. Написал плагин лишь бы работало и в маркет. Не понимаю всех этих страхов перед регулярками пдо и т.д
@MouseZver Ну по тестам это к @romach я совсем о другом. Мелочи это. Масштабируется без проблем. Вот бд редис и т.д вот тут уже по сложнее но есть репликация есть кластеризация вся это тема хайлоуда давно изучена. Тем более сейчас когда когда есть контейнеры оркестрация. Не там все это оптимизируется. Не в ущерб коду. Лучше закешировать что то более сложное чем писать пару страниц непонятно чего.
а на что ты не злой? ты все с нуля пишешь? если нет, посмотри внутренности своих любимых готовых движков, библиотек и фреймворков. там внутри куча регулярок. и чета не тормозит. а если и тормозит, то проблема обычно далеко не в регулярках.
Тут уже было сказано про фанатизм, верно? Апелляция к крайностям - плохой аргумент. Не просто так было сказано, мол если можешь без регулярок, лучше без регулярок. Просто порой люди регулярками делают вещи, которые решаются тем же str_replace без проблем, не думая. --- Добавлено ---
@Fell-x27 Это называется экономить рубль при этом тратя миллионы. Нужно просто один раз увидеть все картину что бы понять почему все именно так.
Да, и это не фреймы и прочее, а инструменты. На фреймах было кучу пыток создать что - либо свое, что в процессе понимал какой это говнокод и дичь, которая не достойна существовать. Ну а теперь на мой вопрос ответь уж наконец, на который сослался почему то @nospiou --- Добавлено --- В тебе нет перфекциониста. До идеала не дойдешь.
Идеала не существует. А вот почему твое мнение расходится с компромиссами миллионов это уже другой вопрос.
Какой вопрос? примеры тормозных примитивных функций? перечитай еще раз что ИМЕННО я сказал. я сказал что тормознутость будет, если их неправильно применять. вот и всё. и не все могут правильно и качественно написать сложный алгоритм разбора текста. а регулярку написать намного проще, при том что результат по скорости будет всегда приемлемым. ибо они очень быстрые. вообще, я изначально написал что нигде не призывая использовать их везде и всегда. а лишь, не бояться их и не веря мифам связанным с ними. поэтому не совсем понятно почему некоторые тут так 'возбудились' и начали доказывать мне обратное от того, что я и не утверждал
Это называется взаимоисключающие параграфы. В одном абзаце ты призываешь не экономить, в другом параграфе ты говоришь, что вордпресс тормозит, потому что быдлокодеры тяп ляп и готово клепают свои говноплагины, не думая о людях. Я даже не знаю, двоемыслие это, или лицемерие.
@Fell-x27 Нет. Это как не положить кусочек сахара а потом пролежать месяц после голодного обморока. Ты просто утрируешь. В первую очередь я обвиняю бд. Во вторую код но никак не регулярки или pdo. К примеру если скрипт обрабатывает статику это должно кэшироваться но никто этого не делает. Вообще wp никогда не будет быстрым он разработан под модули. Если взять тот же криво написанный dle который сам в себе он работает очень быстро.