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

    +158

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    <?php
    class WikiParser{
    private $p;
    function __construct($p){
    $this->p=$p;
    }
    function parse(){
    $this->p = preg_replace('/\[\[([^\/"?[=|]+?)\]\]/siu', '<a href="link.php?sea=$1">$1</a>', $this->p);
    $this->p = preg_replace('/\[\[([^\/"?[=|]+?)\|(.+?)\]\]/siu', '<a href="link.php?sea=$1">$2</a>', $this->p);
    $this->p = preg_replace('/\[\[([a-z]+?:\/\/[^"|]*?)\|([^"?[=|]+?)\]\]/siu', '<a href="$1">$2</a>', $this->p);
    $this->p = preg_replace('/\[\[([a-z]+?:\/\/[^"|]*?)\]\]/siu', '<a href="$1">$1</a>', $this->p);
    
    $this->p = preg_replace('/&lt;&lt;([^\/"?[=|]+?)&gt;&gt;/siu', '<a href="link.php?sea=$1">$1</a>', $this->p);
    $this->p = preg_replace('/&lt;&lt;([^\/"?[=|]+?)\|(.+?)&gt;&gt;/siu', '<a href="link.php?sea=$1">$2</a>', $this->p);
    $this->p = preg_replace('/&lt;&lt;([a-z]+?:\/\/[^"|]*?)\|([^"?[=|]+?)&gt;&gt;/siu', '<a href="$1">$2</a>', $this->p);
    $this->p = preg_replace('/&lt;&lt;([a-z]+?:\/\/[^"|]*?)&gt;&gt;/siu', '<a href="$1">$1</a>', $this->p);
    $this->p = preg_replace('/\*\*\*?([^"?=#%]+?)\*\*\*?/siu', '<b>$1</b>', $this->p);
    $this->p = preg_replace('/\-\-\-?([^"?=#%]+?)\-\-\-?/siu', '<s>$1</s>', $this->p);
    $this->p = preg_replace('/\/\/\/?([^"?=#%]+?)\/\/\/?/siu', '<i>$1</i>', $this->p);
    $this->p = preg_replace('/\r?\n\r?\n/', '</p><p>', $this->p);
    $this->p = preg_replace('/\n/', '<br/>', $this->p);
    $this->p = preg_replace('/\{\{locked\}\}/', '<table style="clear: both; width: 90%; border-color:#333333; border-style: solid; border-width: 1px 1px 1px 2px; padding: 2px; margin: 1px auto 1px auto; vertical-align: center; background-color: #fefefe; text-align: left;"><tr><td style="vertical-align: middle">Статья огорожена от <a href="link.php?sea=вапераст">ваперастов</a></td></tr></table>', $this->p);
    $this->p = preg_replace('/\{\{locked\|(.*?)\}\}/', '<table style="clear: both; width: 90%; border-color:#333333; border-style: solid; border-width: 1px 1px 1px 2px; padding: 2px; margin: 1px auto 1px auto; vertical-align: center; background-color: #fefefe; text-align: left;"><tr><td style="vertical-align: middle">Статья огорожена от $1</td></tr></table>', $this->p);
    $this->p = preg_replace('/\{\{недопись\}\}/siu', '<table style="clear: both; width: 90%; border-color:#333333; border-style: solid; border-width: 1px 1px 1px 2px; padding: 2px; margin: 1px auto 1px auto; vertical-align: center; background-color: #fefefe; text-align: left;"><tr><td style="vertical-align: middle"><b>Недопись</b><br>Ваша статья - Гавно. Короткая, тупая и малоинформативная</td></tr></table>', $this->p);
    $this->p = preg_replace('/\{\{недопись\|([^|]*?)\}\}/siu', '<table style="clear: both; width: 90%; border-color:#333333; border-style: solid; border-width: 1px 1px 1px 2px; padding: 2px; margin: 1px auto 1px auto; vertical-align: center; background-color: #fefefe; text-align: left;"><tr><td style="vertical-align: middle">Недопись<br>Ваша статья - $1</td></tr></table>', $this->p);
    $this->p = preg_replace('/\{\{moved\|(.*?)\}\}/', '<table style="clear: both; width: 90%; border-color:#333333; border-style: solid; border-width: 1px 1px 1px 2px; padding: 2px; margin: 1px auto 1px auto; vertical-align: center; background-color: #fefefe; text-align: left;"><tr><td style="vertical-align: middle"><b>Статья перемещена</b><br>--&gt;$1</td></tr></table>', $this->p);
    $this->p = preg_replace('/[[<]#[]>]/', '', $this->p);
    if(!preg_match('#^<p>.*</p>$#siu', $this->p)) $this->p='<p>'.$this->p.'</p>';
    $this->p = preg_replace('/<p><\/p>/siu', '', $this->p);   
    }
    function get(){return $this->p;}
    }
    ?>

    Без комментариев

    Запостил: startapp, 08 Сентября 2010

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

    • недопись
      Ответить
    • чего это тут Wikiзавроид раздристался...
      Ответить
    • садо-мазо?
      Ответить
    • недопись -- очень верное слово.

      Всё таки регулярки таят в себе одну бяку. Это очень мощный инструмент, но не без бяки.
      А бяка в том, что хомячки решили что продакшен парсеры надо писать на регулярках. Если бы у них не было регулярок -- они бы пыжылись со своими substr, strlen и indexOf (или как там в пхп найти подстроку в строке) и разбив лоб прочитали бы про конечные автоматы, наконец. И узнали бы как надо делать парсеры.

      Как я сегодня узнал -- кое-кто пишет парсер для шаблонизатора на регулярках (правда на js).
      Ждем компилятора с парсером на регулярках!
      Ответить
      • регулярки - готовый конечный автомат, а хомячки не хотят обучаться
        Ответить
        • *описание по которому строится КА. И об какой-либо эффективности можно говорить только при многократном использовании уже построенных автоматов
          А в уэбэ сама среда не позволяет пользовать их многократно
          Ответить
          • многократно: один раз скомпилировать регулярку, и заматчивать до дыр?
            Ответить
          • >>А в уэбэ сама
            не в уебе а в пыхах и классических цги

            в жабе или дотнете -- не так
            Ответить
            • где-то рядом был еще js до кучи

              в пыхе не должно быть тоже, но почему-то mod_php уже который год делается под apache 1.x
              Ответить
              • 1) mod_php позволяет хранить данные в памяти веб-сервера?;)
                2) mod_php есть для apache 2, хотя и с оговориками (с тредовой моделью)


                Вообще после той же жабы это всё напоминает какой-то аццкий геморой.
                В жабе (или нете) ты можешь хранить объекты в куче. Тебе не надо сериализовать их в сессию, не надо ходить в мемкешд, не надо ипацо с fast_cgi. Хранишь, и все.
                Если тебе надо делать какое-то действие переодически -- тебе не надо вешать это на крон. не надо вызывать по каждому энному заходу. надо просто сделать тред, и делать там что нужно.

                Как в нормальном, десктопном приложении.
                Я не понимаю реальне как люди на пыхе пишут
                Ответить
                • если бы java-хостинги были дешевы, а спрос на java-разработчиков был высок (для создания простых веб-приложений или веб-сайтов), то пхп не получил бы такого широкого развития.
                  Но ведь у нас в стране принято всё делать дёшево и сердито. Зачем мне (разрабу) воротить портал на JBoss + Spring/Struts + Oracle SQL Server (или подобном - не особо разбираюсь в ворохе j2ee технологий), когда можно состряпать по-бырику на Apache+PHP+MySQL?
                  Зачем мне (заказчику) арендовать экзотический java-хостинг или вовсе VDS, если можно прикупить мешок шаредов по 2 рубля/пучок?
                  Ответить
                  • страна уже 20 лет банановая республика и никаких новых тенденций в сфере технологий не рожает, но просто перенимает глобальное с лагом в неск. лет.
                    с точки зрения любви к альтернативной истории, да, интересно, что юзалось бы если не было PHP
                    Ответить
                • его можно загрузить в 2.х, но начинка осталась 1.х (handler вместо filter)
                  в итоге если, допустим, скрипт завершился со статусом 404, то и отдавать соответствующий ErrorDocument придется скрипту, хотя апач о нём знает, и если переделать, заюзав mod_perl, то всё будет работать как наконфигурено
                  вот такое феерическое говно наш пых
                  Ответить
      • разве в php или js есть более лучшая альтернатива регулярным выражениям?
        Ответить
    • Лол, автор инновационного вики-движка запостил свое же творение.
      Молодец, чо.
      Ответить
    • > <a href="link.php?sea=$1">
      Где здесь море?
      Может, see?
      Ответить
    • Я как-то парсилку данных из разных движков форумов писал, выглядело похоже.
      Ответить
    • есть язык РЕФАЛ-5 он как раз для работы с текстом вот ломаю голову как его к серверу прикрутить использовать для работы с текстом а то у меня порой бывает задачи когда надо 100 метровые логи привести в человеческий вид и выбрав из них только нужное
      Ответить
      • попробуй погуглить?..
        (...наиценнейший совет...)
        Ответить
        • Добавлю. Гугли "основы русской пунктуации".
          Ответить
        • Ты сам про бывал нагуглить то что мне нужно? Чтоб совет такой давать.
          Ответить
          • > про бывал
            Буква "е" пропущена?..
            Ответить
          • может это пригодится?
            http://www.refal.net/~belous/rphprdoc.htm#4.1. Варианты
            --
            не знаю в чём конкретно у тебя загвоздка...
            Ответить
            • Красавчек а блин пол интерната уже облазил. Спасибо
              Ответить
      • Стометровые логи отлично парсятся седом и авком. А еще перлом.
        Вы риальне хочете для этого учить язык РЕФАЛ?
        Ответить
        • охохо =) слава рефала докатилась и до похапешников

          особенно доставил рефал-5, релизнувшийся в 85м году
          Ответить

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