1. PHP / Говнокод #14329

    +164

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    function get_the_fucking_first_image_from_the_fucking_content_DUDE_is_this_really_so_hard($content)
    {
       preg_match_all('/(<img .*? src=\"\/images.*?\">?)/', $content, $result);
       return $result[0][0];
    }

    мне кажется, коллега задолбался

    Запостил: russling, 08 Января 2014

    Комментарии (17) RSS

    • Я почти так же функцию назвал, когда изображение на стену вконтакта посылал.
      Ответить
    • http://stackoverflow.com/a/1732454
      Ответить
      • http://stackoverflow.com/a/1732454
        Чуть было не запостил не глядя на предыдущие комменты. :) Мем оброс бородой попуще Гендальфа, но терять актуальность пока не собирается, похоже. :)
        Ах, сколько раз этот пост тёрли, восстанавливали, банили, ревёртили...
        Ответить
      • Дурацкий ответ, а ответа в треде и нет. Чуть ниже http://stackoverflow.com/a/1758162
        >I think the flaw here is that HTML is a Chomsky Type 2 grammar (context free grammar) and RegEx is a Chomsky Type 3 grammar (regular grammar). Since a Type 2 grammar is fundamentally more complex than a Type 3 grammar (see the Chomsky hierarchy), you can't possibly hope to make this work. But many will try, some will claim success and others will find the fault and totally mess you up.

        Но в коментах

        >@AdamMihalcin is exactly right. Most extant regex engines are more powerful than Chomsky Type 3 grammars (eg non-greedy matching, backrefs). Some regex engines (such as Perl's) are Turing complete. It's true that even those are poor tools for parsing HTML, but this oft-cited argument is not the reason why. – dubiousjim May 31 '12 at 13:44

        Так что ответа не видать. Типикал stackoverflow.
        Ответить
        • Что чел спросил, то ему и ответили.

          > Do I have that right?
          Нет, неправильно. Надо юзать нормальные парсеры, тот же суп.

          > And more importantly, what do you think?
          Ну вот чел и отписал, что он думает по этому поводу. Я тоже думаю, что парсить хтмл регулярками - пиздец. Ну разве что можно выдрать какие-то конкретные куски, типа ценников из прайса, если их не много, и под рукой нет вменяемого парсера. Но судя по open tags чел собирался делать полный парсинг.

          Язык он не написал, поэтому предложить ему какой-то конкретный парсер хтмля не получится.

          А как бы ты ответил на его вопросы?
          Ответить
          • Ответа, почему нельзя парсить html регулярками, там нету. Зато в топе заплюсованное хуй-знает-что.
            Ответить
            • > почему нельзя парсить html регулярками, там нету
              Да почему нельзя то ;) Можно в частных случаях (если движок типа перла с рекурсивными регулярками или если выдрать пару конкретных полей).

              Просто зачем эта боль в жопе, если почти под все языки есть нормальные готовые парсеры типа того же супа и xpath/css selector?

              > почему нельзя парсить html регулярками, там нету
              Ну так то да. Вменяемым ответом было бы "можно, но это боль в жопе, юзай нормальный парсер".
              Ответить
            • может потому что HTML - это древовидная структура, а регулярки только с ленейными хорошо дружат? Нормальный парсер и Xpath надо юзаtь
              Ответить
              • > HTML - это древовидная структура, а регулярки только с ленейными хорошо дружат?
                Нет. Регулярки того же перла умеют в рекурсию. Просто полноценный парсинг хтмля регулярками это дикая боль в жопе, и куча граблей, на которые можно налететь ;)

                > Нормальный парсер и Xpath надо юзаtь
                Угу, ну или css селекторы как в супе.
                Ответить
                • >>Регулярки того же перла умеют в рекурсию
                  Того же шестого?)
                  Ответить
                  • А х.з. Вроде и пятый умел. Я просто не интересовался этой фичей.

                    Как-то так: http://www.catonmat.net/blog/recursive-regular-expressions/
                    Ответить
            • Более вменяемые ответы есть в http://stackoverflow.com/q/590747
              Просто на момент появления мема вопросы про "почему я написал такую регулярку, а она не находит вот такой передподвыподверт?" появлялись чуть ли не каждую неделю, и основательно задолбали отвечающих и удаляющих. :)
              Ответить
              • В первом ответе опять лажа. Регекспы могут искать открывающий и закрывающий теги, и в каментах это написали. Алсо в том вопросе речь шла о xhtml, который по определению валидный xml. С html можно еще подумать, лучше таки юзать парсер, чем руками фиксить приколы вроде <a><b></a></b> или незакрытых тегов.
                Ответить

    Добавить комментарий