За последние 24 часа нас посетили 17918 программистов и 1655 роботов. Сейчас ищут 1082 программиста ...

Регулярные выражения или стандартные функции?

Тема в разделе "PHP для новичков", создана пользователем AlexandrS, 25 окт 2018.

  1. AlexandrS

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

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Нужно вытаскивать некие данные из текстовых строк.
    Есть 2 варианта, либо сделать это регуляркой (будет меньше кода), либо сделать это strpos() и substr() (кода будет по больше)
    Часто встречаю то, что регулярку не особо жалуют, но только не совсем понимаю по какой причине?
     
  2. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Любая регулярка это дополнительная нагрузка на сервер. Надо чётко представлять задачи для которых они были придуманы. А то некоторые лепят их куда попало.
    Грубо говоря, там где можно решить задачу без регулярнок, там они не нужны. Опять же без фанатизма. А то увлёкшись можно изобрести свои регулярки :)
     
    MouseZver и AlexandrS нравится это.
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.803
    Симпатии:
    1.331
    Адрес:
    Лень
    @Valick, истину глаголишь
     
    AlexandrS нравится это.
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.591
    Симпатии:
    1.763
    Если с strpos решение будет в пару-тройку строк, то делаю strpos, иначе регулярку.
     
    AlexandrS нравится это.
  5. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    смотря какие данные и что нужно вытащить.
    нужно решать по задаче.
    регулярки ругают те кто неумеет ими правильно пользоваться. это один из инструментов, очень мощный и гибкий.
    их код проверен годами и миллионами программистов. внутри они оптимизированы настолько, что тормозов никто не чувствует(по сравнению с примитивными строковыми функциями, ибо эти функции тоже нужно правильно уметь применить, чтоб алгоритм разбора, в итоге, был быстрее регулярки)
     
    AlexandrS нравится это.
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    1) "Примитивные строковые функции" работают на Си.
    2) При их использовании, ты либо явно задаешь номера позиций, по которым нужно работать, либо поиск конкретных символов, которые выполняются за один проход.
    3) Они не юзают дополнительные библиотеки, работают по факту вызова, являются частью ядра.
    Далее, регулярки:

    1) "Оптимизированные регулярки" на самом низком уровне упираются в те же Сишные функции, что и "примитивные строковые функции".
    2) При использовании не здаются явно номера позиций, либо конкретные символы (в общем случае), поиск ведется посредством довольно хитровыбоенной логики, а еще есть жадные квантификаторы, да.
    3) Для работы требут компиляцию, с последующим кэшированием, покуда компиляция регулярки - процесс не дешевый. Кроме того, для работы требуют отдельный внешний модуль.



    Говорить, что регулярки быстрее строковых функций - все равно, что говорить, что PHP может быть быстрее, чем C.
    Дополнительная сложная логика - это всегда оверхед, всегда. Особенно учитывая то, как работают регулярки в плане логики. Они позволяют делать очень сложные вещи в одну строку кода, и за это надо платить свою цену. Чисто физически не могут они быть быстрее нативных функций. Даже когда на вход подается простой паттерн, а не регулярка.
     
    AlexandrS нравится это.
  7. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    А теперь покажи, где я это говорил?
     
    AlexandrS нравится это.
  8. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    На одном сервере под пых можно миллионы держать. Притом он легко масштабируется. Писать нужно красиво и понятно. Экономить на мелочах не стоит.
     
    AlexandrS нравится это.
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Только суть в том, что наоборот, чтобы алгоритм был медленнее и дороже по памяти, чем у регулярки, нужно уметь ппц неправильно применить нативы.
    --- Добавлено ---
    Миллионы чего? Суммарных посещений за год? Запросов в секунду?
     
    AlexandrS нравится это.
  10. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Я же говорил без фанатизма. А тут холивар на ровном месте.
     
  11. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Суммарных посещений в сутки.
    Даже рубисты не жаловались создавая свои гитхабы с твитерами
    [​IMG]
     
    AlexandrS нравится это.
  12. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    те ты хочешь сказать, что, берем к примеру средненькую по сложности регулярку с несложным шаблоном динамической длины, с опережающей и ретроспективной проверкой хотя бы.
    даём сотне средних программистов написать альтернативу ей на нативных функциях.
    и ты считаешь что все они напишут более быстрый и более экономный по памяти код? серьезно?
     
    AlexandrS нравится это.
  13. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.803
    Симпатии:
    1.331
    Адрес:
    Лень
    вот так и создали всеми известный porno-wordpress
    --- Добавлено ---
    Я злой на регулярок, дабы хочу увидеть примеры тормознутых функций. Сделаю закладку и лайк с меня.
     
    AlexandrS нравится это.
  14. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @MouseZver Вордпрес тормозит потому что бд в топку тысячи запросов каждый пытается создать свою таблицу а оптимизации никакой. Написал плагин лишь бы работало и в маркет. Не понимаю всех этих страхов перед регулярками пдо и т.д
     
    AlexandrS нравится это.
  15. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.803
    Симпатии:
    1.331
    Адрес:
    Лень
    ну и каким местом мы читаем ? когда само понятие разжевали во втором посту
     
    AlexandrS нравится это.
  16. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @MouseZver Ну по тестам это к @romach я совсем о другом. Мелочи это. Масштабируется без проблем. Вот бд редис и т.д вот тут уже по сложнее но есть репликация есть кластеризация вся это тема хайлоуда давно изучена. Тем более сейчас когда когда есть контейнеры оркестрация. Не там все это оптимизируется. Не в ущерб коду. Лучше закешировать что то более сложное чем писать пару страниц непонятно чего.
     
    AlexandrS и romach нравится это.
  17. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    а на что ты не злой? ты все с нуля пишешь?
    если нет, посмотри внутренности своих любимых готовых движков, библиотек и фреймворков. там внутри куча регулярок.
    и чета не тормозит. а если и тормозит, то проблема обычно далеко не в регулярках.
     
    AlexandrS и romach нравится это.
  18. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Тут уже было сказано про фанатизм, верно? Апелляция к крайностям - плохой аргумент. Не просто так было сказано, мол если можешь без регулярок, лучше без регулярок. Просто порой люди регулярками делают вещи, которые решаются тем же str_replace без проблем, не думая.
    --- Добавлено ---
    [​IMG]
     
    AlexandrS нравится это.
  19. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @Fell-x27 Это называется экономить рубль при этом тратя миллионы. Нужно просто один раз увидеть все картину что бы понять почему все именно так.
     
    AlexandrS нравится это.
  20. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.803
    Симпатии:
    1.331
    Адрес:
    Лень
    Да, и это не фреймы и прочее, а инструменты. На фреймах было кучу пыток создать что - либо свое, что в процессе понимал какой это говнокод и дичь, которая не достойна существовать. Ну а теперь на мой вопрос ответь уж наконец, на который сослался почему то @nospiou
    --- Добавлено ---
    В тебе нет перфекциониста. До идеала не дойдешь.
     
    AlexandrS нравится это.
  21. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Идеала не существует. А вот почему твое мнение расходится с компромиссами миллионов это уже другой вопрос.
     
    AlexandrS нравится это.
  22. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    Какой вопрос? примеры тормозных примитивных функций?
    перечитай еще раз что ИМЕННО я сказал. я сказал что тормознутость будет, если их неправильно применять. вот и всё. и не все могут правильно и качественно написать сложный алгоритм разбора текста. а регулярку написать намного проще, при том что результат по скорости будет всегда приемлемым. ибо они очень быстрые.

    вообще, я изначально написал что
    нигде не призывая использовать их везде и всегда. а лишь, не бояться их и не веря мифам связанным с ними.
    поэтому не совсем понятно почему некоторые тут так 'возбудились' и начали доказывать мне обратное от того, что я и не утверждал :)
     
    AlexandrS нравится это.
  23. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Это называется взаимоисключающие параграфы. В одном абзаце ты призываешь не экономить, в другом параграфе ты говоришь, что вордпресс тормозит, потому что быдлокодеры тяп ляп и готово клепают свои говноплагины, не думая о людях.

    Я даже не знаю, двоемыслие это, или лицемерие.
     
  24. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @Fell-x27 Нет. Это как не положить кусочек сахара а потом пролежать месяц после голодного обморока. Ты просто утрируешь. В первую очередь я обвиняю бд. Во вторую код но никак не регулярки или pdo. К примеру если скрипт обрабатывает статику это должно кэшироваться но никто этого не делает. Вообще wp никогда не будет быстрым он разработан под модули. Если взять тот же криво написанный dle который сам в себе он работает очень быстро.
     
  25. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    это называется приплыли...
    http://phpforum.su/index.php?showtopic=93948&hl=