Разбор регулярных выражений



    Хочу просто поделиться недавно найденным сервисом для работы с регулярными выражениями. Да, это еще один сервис. Но у него есть особенность — он позволяет не только составлять регулярные выражения, но и помогает разбирать уже написанные — эдакий regexp-декомпилятор.
    Сервис называется Regex101.



    Regex101 — сервис, позволяющий деконструировать чужие регэкспы и объяснить функцию каждого оператора. Ссылки на объяснения можно размещать прямо в комментариях к коду для удобства работы в команде. Так же можно протестировать свой код, получая при этом в реальном времени полное объяснение, как обрабатывается искомый запарос. Ну и да, на сайцте есть справочная информация и раздел с вопросами для тех, кто только входит в мир «регулярок».

    Кстати, вы можете выбрать стиль регулярных выражений: PHP, javascript, Python. Регулярки можно шарить, что может быть очень актуально для командной разработки.

    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 53

      +2
      стиль регулярных выражений: PHP


      Мне кажется, что стоит уточнить как минимум как на самом сайте: PHP -> PHP (PCRE), так как, например, лично я первым делом подумал про регэкспы из перла и sed'а.
        0
        Ну PCRE — это же Perl Compatible Regular Expression. Я perl не знаю, но подозреваю что синтаскис совместим =)
          +3
          Совместим но не на 100%. И всё-таки PCRE — это не PHP, это PCRE. В PHP вообще три синтаксиса регулярных выражений: нерекомендуемый сейчас POSIX (ereg), Oniguruma (mb_ereg) и PCRE (preg).
            0
            Регэкспы в Perl реализованы не с помощью PCRE
              0
              Удивительно :)
            +1
            «Из Перла и Седа»? Они там разные.
            –7
            Логотип явно спёрли :)
            image
              +13
              Это самодеятельность автора статьи :) На самом сайте такого нет.
                +2
                Я никого не обвинял конкретно :) Просто констатировал факт
                  +34
                  Мне кажется, что логотип FedEx'а и стеб автора различит 99.9% жителей Хабры.
                    +3
                    Это так, но заминусовали то зря человека :)
                      0
                      Ну капитанов тут не очень-то и любят
                        0
                        Для меня откровением было. Как-то никакого чувства узнавания не возникло.
                  0
                  На самом сайте, кстати, логотип гораздо симпатичней.
                    0
                    У меня, кстати, цветовая схема сассоциировалась (да простит меня Русский язык) с JetBrains PhpStrom'ом (:
                    +5
                    Спасибо, кэп.
                    +3
                    Было бы совсем здорово, если бы этот сервис выдавал примеры строк, подходящих под регэксп.
                    А вообще, Regexper, имхо, нагляднее. Даже на примере с КДПВ (/h[a4@](([c<]((k)|(\|<)))|((k)|(\|<))|(x))\s+((d)|([t\+]h))[3ea4@]\s+p[l1][a4@]n[3e][t\+]/i — для ленивых)
                      +2
                      Было бы совсем здорово, если бы этот сервис выдавал примеры строк, подходящих под регэксп.

                      Ох как не хватает когда начинаешь разбираться в чужом регэкспе. И приходится заново писать свой, а в итоге через часок мучений получался такой же, было такое. Увидев новость сразу понадеялся на эту фичу, но не тут то было :(
                        +3
                        Есть вот такая штука:
                        bitbucket.org/leapfrogdevelopment/rstr/
                        У неё есть метод xeger(), которая умеет то, что вам надо. Насколько хорошо работает — не проверял. Думаю, что вокруг неё навернуть тривиальный web-интерфейс тоже не проблема.
                        0
                        Поиск строки подходящей под регэксп — NP-полная задача. Конечно, для большого подмножества регэкспов это сделать несложно и этого подмножества хватит за уши для регэкспов, попадающихся на практике.
                          +1
                          А ведь Regexper (или Debuggex?) раньше такое умел. Безо всяких lookaround'ов (про это подмножество речь?) строку вообще поблочно можно построить, поправьте, если вру.
                            0
                            Да, lookaround'ы и бэкреференсы, насколько я знаю
                          +1
                          К линку www добавьте, иначе облом. Спасибо за сервис. А так чтобы наоборот, составлять графы в выражение?
                            +2
                            Есть такая интересная штука, как вербальные выражения: /^(http)(s)?(\:\/\/)(www\.)?([^\ ]*)$/ становится
                            var tester = VerEx()
                                        .startOfLine()
                                        .then( "http" )
                                        .maybe( "s" )
                                        .then( "://" )
                                        .maybe( "www." )
                                        .anythingBut( " " )
                                        .endOfLine();
                            
                            Достаточно читаемо.
                              0
                              Я имел ввиду именно визуальный редактор, а не вербальный.
                              • UFO just landed and posted this here
                              0
                              habrahabr.ru/post/192920/?reply_to=6701148#comment_6700856

                              С момента комментария успел чуть поэкспериментировать, вроде работает прилично, даже на регулярке для проверке емэйлов. Генерит правда такой ад, что страшно делается от осознания того, каким может быть адрес :-)
                                0
                                Regexper неплох (:
                                +8
                                Да, разбор знменитого регэкспа для валидации email впечатляет:
                                regex101.com/r/lP7vL3
                                  0
                                  Да и просто раскрашенный регексп круто выглядит. Подумываю распечатать на цветном принтере и повесить над рабочим местом :-)
                                  • UFO just landed and posted this here
                                    +3
                                    разбор в www.debuggex.com/ впечатляет куда сильнее… www.debuggex.com/r/Db8mjii2FkMI2Qtv/0
                                    • UFO just landed and posted this here
                                      +1
                                      Теперь намного понятнее!
                                      0
                                      Похож на www.rubular.com с дополнительными фичами. Спасибо!
                                        +4
                                        Недавно обнаружил www.debuggex.com/ — по-моему, самый лучший сервис. Представляет в визуальном виде регулярку и очень помогает в их написании.

                                          0
                                          Шикарно!
                                            0
                                            Тоже им пользуюсь. Сам в регулярках не особо хорошо разбираюсь, поэтому этот сервис меня всегда спасает. Ничего удобнее не встречал.
                                              0
                                              Классная вещь, которая заодно позволяет вспомнить дискретку с её конечными автоматами.
                                              0
                                              В IDEA испоьзую Regex Tester:

                                              • UFO just landed and posted this here
                                                –1
                                                Еще есть www.pcre.ru/eval/
                                                  +1
                                                  В общую копилку: gskinner.com/RegExr/
                                                    0
                                                    Туда же regexpal.com/
                                                    • UFO just landed and posted this here
                                                      0
                                                      Мне весьма понравился этот тестер: rubular.com/
                                                        –1
                                                        Вот лучше бы Фридла почитали, чтобы вместо ужаса типа
                                                        (www\.[A-z\d\.\+\-]+) было что-то типа /(w{3}\.[-a-z\d+.]+)/i
                                                          0
                                                          А что быстрее работать будет «www» или w{3}? Что-то логика мне подсказывает, что второй вариант будет сопоставим по скорости только если библиотеку писали пряморукие люди.
                                                            0
                                                            Что-то мне подсказывает, что криворукие люди не напишут в продакшен машину регулярных выражений.

                                                            А что быстрее будет работать — честно говоря пофик, микрооптимизации меня никогда не интересовали.
                                                              0
                                                              Подумал. Второй вариант всегда будет чуть медленнее (опять же при допущении пряморуких), т.к. будет некоторый оверхед на разбор скобок и поиск выражения в них.

                                                              Это не камень в ваш огород, просто в данном, конкретном примере w{3} выглядит как раз, как некая микрооптимизация. Причем в данном случая я не могу понять ее смысл.
                                                                0
                                                                Скорее это выглядит как выпендрёж, т.к. во-первых «www» слегка читабельнее, чем w{3}, а во-вторых содержит меньше символов и даже набирается быстрее xD
                                                                А вот в том, что [A-z\d\.\+\-] — это ужас, meettya полностью прав, особенно «A-z» доставляет… хотя… вдруг это хитрая оптимизация чтобы захватить символы между Z и a :-)
                                                          0
                                                          Отличный сервис.
                                                          Чего не хватает:
                                                          — помощи по флагам, как например в указанном ранее www.debuggex.com/
                                                          — дебаггера как в RegexBuddy, что очень помогает отлаживать выражения, а главное оптимизировать по скорости (правда такого я онлайн пока не видел).
                                                            0
                                                            На regex101.com/ правило (поиск внутри кавычек):
                                                            (?>(?<!\\)(?>"(?>\\.|[^\\"]+)+"|""|(?>'(?>\\.|[^\\']+)+')|''|(?>`(?>\\.|[^\\`]+)+`)|``))
                                                            вылавливает только первое совпадение.

                                                            rubular.com/ и gskinner.com/RegExr/ находят все кавычковые блоки.

                                                            Only users with full accounts can post comments. Log in, please.