Regexponline – интерактивный анализатор и редактор регулярных выражений

    Есть одна бородатая шутка: «если у вас есть проблема, и вы собираетесь решать ее с использованием регулярных выражений, то у вас есть две проблемы». Действительно, регулярные выражения – очень мощный и гибкий инструмент, применяемый для решения весьма широкого круга задач. Но, как водится, для поддержания баланса, такой серьёзный инструмент имеет весьма недружелюбный вид.

    (<([a-z]+[^>]*)>)(.*)(</\2>)

    Такая чупакабра новичка приводит в трепетный ужас, да и знающего человека заставляет невольно поморщить нос. А ваша девушка вообще решит, что вы свихнулись, когда увидит вас за написанием такой конструкции.

    image

    Когда-то и мне пришлось по долгу службы подружиться с регулярными выражениями. Прочитав Фридла и несколько статей на Хабре, я, конечно, начал понимать этот синтетический язык. Тем не менее, каждый раз, когда приходилось написать очередную регулярку, я быстро закапывался в нагромождении скобок, слешей, точек, плюсов, знаков вопроса, и других хорошо вам знакомых конструкциях. Разобраться в этой каше было очень сложно, особенно если возвращаешься к задаче месячной давности. Я мечтал об инструменте, который помог бы мне разобраться в собственном творении. Приблизительно подходящих по смыслу сервисов нагуглилось с десяток, но все они приносили мало пользы. Как раз тогда я и начал разрабатывать этот проект.

    Итак, regexponline – инструмент, способный наглядно изобразить структуру регулярного выражения, разобрав его по элементарным компонентам; продемонстрировать совпадающие и не совпадающие его части; помочь в написании и отладке выражения, которое почему-то не совпадает с нужной строчкой.

    Позвольте мне продемонстрировать работу сервиса сначала на простом синтетическом, но наглядном примере, а потом на примере «из жизни».
    Для первого примера возьмём этот ужас из рамочки сверху и убедимся, что это вполне осмысленное выражение, которое кому-то наверняка когда-нибудь пригодится.

    Открываем браузер (желательно хром свежей версии), вводим адрес http://regexponline.com/. Вуаля. Интерфейс системы состоит из трёх логических блоков – сверху вбиваем строчки, на которых будем тестировать регулярное выражение, посередине собственно саму регулярку (по умолчанию там появится уже знакомое нам выражение), снизу в виде таблицы будет показываться структура регулярного выражения и совпавший с ним текст. Попробуйте навести мышку на любую часть регулярки. В строчках тут же подсветится совпадающая часть. Все блоки раскрашены в разные цвета, одинаковый цвет означает один уровень вложенности (группировка происходит по скобкам, т.е. скобка внутри скобки – это один уровень вложенности). Серый цвет – нулевой уровень вложенности, т.е. всё регулярное выражение или вся строчка целиком, розовый – первый, зелёный – второй, и так далее. Все строчки и регулярка редактируются по двойному клику. В общем, лучше всего понять структуру регулярного выражения можно, поводив мышкой туда-сюда по всем блокам. Другой, более наглядный способ – нажать на кнопку «expand regex». Регулярное выражение разложится на составляющие, сгруппированные по уровню вложенности.

    Думаю, уже стало понятно, что это за регулярное выражение. Оно совпадает с частями строк, представляющими из себя открывающий и закрывающий html-тег и контент между ними.

    Очень часто бывает удобно присваивать группам имена. Тогда на выходе мы получаем массив совпадений, проиндексированных не только по порядку, но и этим именам. В regexponline это делать особенно удобно. Надо просто кликнуть на нужную группу и в появившемся поп-апе нажать «rename». Регулярное выражение, конечно, удлиняется, зато сразу становится понятен смысл каждой группы. Посмотрите на скриншот, разве тут ещё остаются вопросы, что к чему?

    image

    Ещё одна небольшая, но очень удобная фича – редактирование в реальном времени. В этом режиме все изменения регулярного выражения применяются прямо на лету, не нужно обновлять страницу, не нужно двойного клика, не нужно жать «ОК» — поправил регулярку, через секунду увидел обновлённый результат. Крайне удобно при отладке плохо работающего регэкспа.

    Если при рефакторинге чужого кода вы нашли регулярное выражение, которое делает непонятно что – открывайте этот сервис, копипастите его туда, и разобраться станет намного проще.

    Для второго примера предлагаю разобрать стандартную задачу валидации email.

    Уверен, многие сталкивались с задачей проверить пользовательский ввод и удостовериться, что юзер указал свой почтовый адрес, а не ‘);DROP TABLE students;--. Какие у вас были первые действия? Писать своё выражение? Или нагуглить готовое решение в интернете? Теперь можно сочетать эти два подхода. В regexponline есть каталог регулярных выражений. Любой может в него добавить свой паттерн, если считает, что он может пригодиться коллеге по оружию. Также, результат любой вашей работы можно сохранить на сервере и получить на него ссылку, чтобы вернуться к работе позже, или чтобы отправить другу (кнопочка «share»).

    Итак, в каталоге выражений найдите «Email», или используйте ссылку, которую я сделал специально для вас: http://regexponline.com/s/uv. В открывшемся регулярном выражении, устрашающим своими размерами и сложностью, становится легко разобраться, просто поводив по нему мышкой или нажав кнопку «expand regex».

    Друзья, это молодой проект, в котором ещё многое предстоит сделать, многое доработать. Как часто бывает, этот инструмент писался «для себя», но потом я подумал, что это может быть полезно и кому-то ещё. Надеюсь, кому-нибудь я помогу сэкономить час-другой времени, потраченного на утомительное ковыряние в спецсимволах вашего регэкспа.

    Спасибо за внимание, буду рад вашей критике, вопросам и предложениям.

    Статья написана в рамках конкурса статей студентов проекта Технопарк Mail.Ru
    Поделиться публикацией

    Комментарии 74

      +4
      А я пользуюсь www.regexper.com/
        +5
        А я пользуюсь RegExr
          0
          А дебажить?
          +3
          Аналогично — использую RegExr для примерки.
          Возможность вставить длинный текст — очень помогает в работе.
          +3
          Есть еще замечательный www.debuggex.com
          • НЛО прилетело и опубликовало эту надпись здесь
              +3
              Плюсую. Regexpal удобнее.
              Всего 2 поля — ввод регулярного выражения, и поле для ввода анализируемого текста. Ну, несколько чекбоксов, которые понятно для чего нужны.
              А что мы видим здесь?

              Когда Я захотел прогнать регулярку с телефонами из regexponline.com, сначала тупил, как скопировать текст анализируемой строки. Сначала решил войти в режим редактирования строки даблкликом(Зачем он здесь? Почему нельзя сделать сингл клик?). Окей, вошел, выделяю строку, жму — Ctrl+C, иду в regexpal, ставлю курсор мыши в поле ввода анализируемого текста, жму Ctrl+V, в результате получаю:

              — See more at: regexponline.com/#sthash.SMHP6oM0.dpuf

              Что за х..? Я ж не это копировал!
              Ладно, думаю, нужно повторить еще раз! На этот раз опять вхожу в режим редактирования строки, выделяю текст, жму ПКМ, выбираю пункт «Копировать», опять иду на Regexpal, ПКМ -> Вставить. И что же Я вижу?
              Опять этот — See more at: regexponline.com/#sthash.SMHP6oM0.dpuf
              Чтоза е… аррот!?

              Окей! Тут меня посетила мылсь попробовать скопировать анализируемый текст не входя в режим редактирования текста, вуа-ля:

              Call 1-800-333-4636 for any Question about Government — See more at: regexponline.com/#sthash.SMHP6oM0.dpuf

              Эй! Откуда взялась эта лабуда с «See more ...»? Там не было этого текста!

              Кнопки «Realtime editing» быть не должно, оно по умолчанию должно быть в реалтайм режиме. Почему никак не показываете инфу, что выполняется запрос к серверу во время редактирования регулярки в реалтайме? Я сначала изменил предоставленную по умолчанию регулярку, но кроме как в этом поле ввода ничего нигде больше не изменилось. Я подумал, что Я сделал что-то не так, ан-нет, просто ответ от сервера долго шел ко мне. Гифку какую-нибудь хоть покажите, ну или просто надпись с текстом типа такого: «Выполняется анализ, подождите.»

              Кнопка «Expand regex» доставила. Весьма удобная штука, когда внезапно запутаешься в собственной регулярке.

              И еще. Я, конечно, понимаю, что твиттер бутстрап это очень модно и круто, но меня бесит, что на своем ноуте с разрешением экрана 1366x768 при анализе одной только строки «Call 1-800-333-4636 for any Question about Government» у меня появляется вертикальный скролл.

              Личный вывод: Симпатичненько, гламурненько, но не юзабельно. Интерфейс слишком избыточен. По компактнее бы все это…
                +2
                Вот это да. Спасибо за отзыв! Косяк на счёт «See more» правда был — оказалось, скрипт социальных кнопок «ShareThis» автоматически добавлял ко всему копируемому и вставляемому тексту такую фразу, даже не спросив у меня разрешения. Остальные ваши замечания я добавил в todo-лист, обязательно сделаю, спасибо.
              +2
              использую только rubular.com
                0
                Не плохо. Но функционала бы побольше. Та же библиотека. Подсветка групп. И т.д.
                0
                А мне хватает rubular.com Упс опередили (
                +1
                Странно, а почему 100, а не 198?
                  0
                  Видимо остальные проблемы были такие же большие.
                • НЛО прилетело и опубликовало эту надпись здесь
                    +7
                    Может быть и не надо.(с)
                    • НЛО прилетело и опубликовало эту надпись здесь
                        0
                        По вашему совету решил посмотреть что это за курс, тем более тема давно интересовала. С удивлением отметил что на сайте стенфорда есть адекватный перевод лекций на русский язык. Очень неожиданно
                        • НЛО прилетело и опубликовало эту надпись здесь
                            0
                            Cпасибо, как правило так и делаю, но меня поразил факт наличия русских субтитров, причем переведенных не машиной, на курсере. Именно эта совокупность
                    0
                    Замечательный инструмент! Всегда боялся регэкспов, и зачастую городил вместо них сложные конструкции, в которых потом тратил время на то чтобы разобраться.
                      +2
                      >> (<([a-z]+[^>]*)>)(.*)(</\2>)
                      >> да и знающего человека заставляет невольно поморщить нос

                      Вроде простенькое выражение, просто группировок побольше поставили
                      Хотя бы /(?:(?:\s?\{\d\/\d\}\s)([\w\d\+\-\*]*))+?(?:\s(?:->|->|=)\s)(?:(?:\s?\{\d\/\d\}\s)([\w\d\+\-\*]*))+?(?:\s===(?:>|>){3})/
                        +10
                        Мне всегда казалось, что прочитав регулярное выражение такого типа, можно призвать сатану.
                          0
                          Изгнать!
                            +1
                            Изгнать сатану, я имел ввиду…
                          +1

                          Даже писать ничего не получается. Просто картинка. Просто эмоция
                            +1
                            Звездочка жадная, съест закрывающий тег и не подавится
                            +5
                            >> (<([a-z]+[^>]*)>)(.*)(</\2>)
                            Немного не верно. Правильнее будет:

                            (<([A-Za-z](?:[A-Za-z0-9:-]*[A-Za-z0-9])?)[^>]*>)(.*)(</\2>)
                            Иначе аттрибуты искать будет в закрывающем тэге.

                            А вообще нужно еще корректно описать формат аттрибутов, а не с помощью [^>]*.
                            Да и с вложеными тегами облажаться можно. Короче, прописная истина: использовать регулярные выражения для разбора xml — себе дороже.
                              0
                              Вы, конечно, правы. Это простой пример, который я намеренно не стал усложнять, чтобы не пугать читателя с первых строк :-)
                              А на счёт парсинга html/xml регулярками интересные мысли высказал автор соседнего поста: habrahabr.ru/post/171667/
                                +1
                                Это да… а вообще если знать точную структуру xml, то парсить регулярками не сложно.

                                Вообще, писал этот комментарий сразу после трехчасовой работы над грамматикой для lex/yacc, поэтому мои примеры несколько предвзяты.
                              +3
                              Оххх.
                              (<([a-z]+[^>]*)>)(.*)(</\2>) -> (<([a-z]+[^>]*)>)(.*?)(</\2>)

                              Но вообще парсить HTML регулярками черевато :)
                                0
                                Спасибо. На счёт парсинга HTML — интересные мысли в соседнем посте: habrahabr.ru/post/171667/
                                  0
                                  Да не за что, жадность — первое на чем вечно накалываешься :)

                                  О парсинге HTML, тут кабэ такая мыслишка — я не говорю о том, что это невозможно регулярками — они неплохо с этим справляются и частенько парсеры внутри себя их и используют.

                                  Я о том, что в реальном мире HTML вполне вероятно может оказаться сломанным и все пойдет плохо. Суть парсеров в том, что их писали реально мозговитые ребята (уж точно поумнее меня) и они с этой проблемой так или иначе боролись. Тесты, документация и т.д. — это блин непросто все. Так что лучше взять готовое.
                                +1
                                /(<([a-z]+[^>]*)>)(.*)(</\2>)/

                                Если уж пишете статью, то пользуйтесь

                                А вообще что бы читать свободно регулярки надо их писать, какие-то жалкие 10 000 часов тренировок и прочитать любое выражение не составит труда :)
                                  0
                                  Чаще всего разработчики в своём редакторе видят регулярные выражения без всякой подсветки, я стремился вызвать соответствующие ассоциации :-)

                                  За сервис спасибо, я о таком не знал.

                                  Товарищ в этом комментарии оставил пример — habrahabr.ru/post/175179/#comment_6086545 — мне сходу не удаётся понять логический смысл, надо разбираться, а вам? )
                                    +1
                                    Я сходу могу увидеть только общую структуру и сразу вижу лишние группировки и повторяющиеся альтернативы, но опознать строчку, которую оно покрывало, не могу. Имхо это либо недоделанная или намеренно перегруженная регулярка.

                                    Как мне кажется, регулярка отражает способ мышления человека и разные люди будут использовать разные подходы. В конечном итоге, наверное, безупречное для данной задачи выражение будет одно, но перфекционизм в задачах, для которых используют регулярки, встречается редко. Так что возможно имеет смысл использовать их для определения авторства :) И, наконец я закончу свою мысль, свои регулярки, сколь угодно сложные, читаются не в пример проще, поскольку они изначально ближе по методу построения.

                                    А подсветку я сделал исключительно для статей на хабре.
                                  +23
                                  Ты не можешь распарсить [X]HTML при помощи регулярных выражений. Потому что HTML не может быть распарсен при помощи регулярных выражений. Регулярные выражения это не тот инструмент, который может быть использован для того, чтобы корректно распарсить HTML. Как я уже неоднократно ранее отвечал в вопросах про HTML и регулярные выражения, нельзя скормить регулярке HTML. Регулярные выражения являются инструментом, недостаточно продвинутым для того, чтобы понять все конструкции, используемые в HTML. HTML — не регулярный язык и не может быть разобран регулярными выражениями. Запросы регулярных выражений не приспособлены для разбивки HTML на осмысленные части. так много раз но я не понимаю. Даже навороченные нерегулярные регулярные выражения Перла не в силах справиться с задачей парсинга HTML. Ты никогда меня не сломишь. HTML является языком достаточной сложности, чтобы его нельзя было разбирать при помощи регулярных выражений. Даже Джон Скит не может распарсить HTML регулярными выражениями. Каждый раз, когда ты пытаешься распарсить HTML регулярными выражениями, дитя дьявола умывается кровью девственниц, и русские хакеры взламывают твой сайт. Разбор HTML регулярками призывает нечестивые души в обитель живых. Регулярные выражения и HTML сочетаются также, как любовь, брак и ритуальное детоубийство. Его <center> не сдержит уже слишком поздно. Совместная сила регулярных выражений и HTML в одном концептуальном пространстве разметет твой разум как водянистые какашки. Если ты парсишь HTML регулярными выражениями, ты склоняешься перед Ними и их богохульными путями которые обрекли нас всех на нечеловеческие муки во имя Того чье Имя не может быть выражено в Основной Мультилингвальной Плоскости, он грядет. HTML-и-регулярки разжижит нервы разумных пока ты наблюдаешь твоя душа иссыхает в атаке ужаса. Парсе̿̔̉ры HTML на регулярках это рак убивающий Хабрахабр слишком поздно слишком поздно нас не спасти проступок ди͡тя гарантирует регулярки поглотят всю живую плоть (кроме HTML, как уже ранее предрекалось) боже милостивый помоги нам как кто нибудь может пережить эту кару парсить HTML регулярками обрекло человечество на вечность ужасающих пыток и дыр в безопасности использование регулярок как инструмента для обработки HTML создает брешь между этим миром и кошмарной обителью и͒ͪс͛ͫпорченных сущностей (как сущности SGML, только более испорченные) даже беглый взгляд на мир парсеров HTML на регулярках мгновенно перенесет сознание программиста в мир нескончаемого плача, он грядет, тлетворная склизкая регулярная зараза пожрет твой HTML-парсер, приложение и существование всего времени как Visual Basic только хуже он грядет он грядет не противься он гряд̡ет ̕его нече̨сти͞вое сџяњµе разру҉шает разу̍̈́̂̈́мне, теги HTML те͠ќ̧у͘т џ̶з тв̡ои͟х гла͢з̸ ̛к̕ак жидкая боль, песнь парсинга регу̸лярными выражениями затмит глас смертных со сферы я вижу ты видµшь ̲͚̖͔̙э̩́т̲͎̩̱͔́̋̀∆ оно прекрасно последняя капля лжи людской ВСЕ ПОТЕ͖̩͇̗̪̏̈́РЯНО ВСЕ ПОТЕРЯНО пон̷и он грядет он гр̶̮ядет он грядет ich or permeates все МОЕ ЛИЦО МОЕ ЛИЦО бᵒже нет НЕТ Н∑Е̼∑Т ЊЂТ прекрат *̶͑̾̾​̅ͫ͏̙̤g͇̫͛͆̾ͫ̑͆l͖͉̗̩̳̟̍ͫͥͨe̠̅s ͎a̧͈͖r̽̾̈́͒͑eэ̑ͧ̌т˚ͨç∂̘̝̙̃ͤ͂̾̆ нZA̡͊͠͝LGΌ Э†Оͮ̂҉̯͈͕̹̘̱ ТО͇̹̺ͅН̴Ɲ̳ ̘͖́̉ ͠∏̯͍̭0̚​Н̐И̡ 0͖́̉ ͠Н̯͍̭ Г̸̡̪̯ͨ͊̽̅̾̎P̬̩̾͛ͪ̈́̀́͘ ̶̧̨̱̹̭̯ͧ̾ͬR̷̨̙̲̝͖̥̫͎̭ͭ̏ͥͮͯ̿̔̀͟∆̲̖͊̒ͪͩͬͮ̚̚͜͏̮̪̝͍∑̴̟̟͙ͬͮ̚̚͜͏̞ͩ͌͝†̸̡̯͍̭̪̯ͨ͊̽̅̾̎



                                  А почему бы, кстати, не использовать XML-парсер? [ оригинал ]
                                    +3
                                    безысходность
                                      +1
                                      Это же прекрасно!
                                      0
                                      В Komodo IDE есть прекрасный инструмент для анализа и написания RegExp. Подсветка синтаксиса присутствует. Отличная штука.
                                        0
                                        Кто сходу скажет что делает данное выражение? И какова сфера его применения?
                                        (/([a-z0-9_-]+)/([a-z0-9_-]+))

                                        Кстати выше упоминался сервис www.debuggex.com. Не совсем удобен. Да конечно хорошо что визуально показывает. Но с данным выражением не справился до конца. Да и ни один из сервисов не отработал так как нужно кроме. gskinner.com/RegExr/
                                          +1
                                          Сходу: два начинающихся со слешей наборов символов из диапазона a-z, 0-9 и подчёркивания с минусом (тире).
                                          Вариант сферы применения — парсинг URL. Часть.
                                          Не понимаю, что такого особо непонятного/сложного в RegExp-ах, что все на них так ругаются. Да, напрягаться немного при чтении нужно, но вы же код обычный как-то читаете?
                                            –2
                                            Ну я как и многие сразу бы и не сказал что этот регепс разбирает урлы выда: /type/auto/color/red/size/smail
                                            На массив вида
                                            Array
                                            (
                                            [0] => Array
                                            (
                                            [0] => /type/auto
                                            [1] => /color/red
                                            [2] => /size/smail
                                            )

                                            [1] => Array
                                            (
                                            [0] => type
                                            [1] => color
                                            [2] => size
                                            )

                                            [2] => Array
                                            (
                                            [0] => auto
                                            [1] => red
                                            [2] => smail
                                            )

                                            )
                                              +1
                                              Т.е. вы считаете это неочевидным?
                                                0
                                                Для меня к сожалению да.
                                                  0
                                                  Я бы предпочёл использовать что-нибудь типа split('/'). Согласитесь, в разы понятнее.
                                              +1
                                              Кстати, можно немного улучшить: (/([\w_-]+)/([\w_-]+))
                                                –2
                                                Это конечно да. Но мне малость не удобно читать такой регепс.
                                                  +1
                                                  Только, раз уж используйте \w — можете смело убрать и знак подчеркивания.
                                                +3
                                                Вообще, кроме попыток как-то подсветить регулярку, чтобы понять, что всё-таки имелось в виду, можно её еще изначально понятнее писать.
                                                Вот некоторые трюки (некоторые работают не во всех языках):
                                                • Выбирать делимитеры, которые не придётся экранировать: #http://# против /http:\/\//
                                                • Использовать не-бэклинкующиеся группы (?expr) в тех случаях, когда группу не нужно выцеплять: #(?https?:)?//#. Потом не придётся гадать, зачем тут эта группа.
                                                • Использовать именованные группы (?'name'expr) — тогда не придётся потом гадать, что эта группа выцепляет: #(?(?'proto'https?):)?//#. Только осторожно, а то возможно сумасшествия от экранирования кавычек.
                                                • Если вы собрались писать совсем уж монструозный регэксп, возможно стоит воспользоваться xtented-синтаксисом — там можно разбивать монстра на несколько строк и комментировать их
                                                • Стремиться решить задачу попроще, например, помня про незахватывающее заглядывание вперёд и назад
                                                • Не парсить регулярками HTML, ну про это уже писали не раз.
                                                  0
                                                  Раз уж речь зашла про Технопарк Mail.ru, хочу спросить: есть ли где в общем доступе ваши лекции?
                                                    0
                                                    в открытом доступе пока нет, но скоро (возможно, летом) будут. Есть кое-какие записи мастер-классов, они выложены на tp.mail.ru/
                                                      0
                                                      Понятно, спасибо.
                                                      Просто есть интересные курсы, я бы послушал.
                                                    0
                                                    По совпадению, часом позже после этой статьи, опубликовал свою статью про использование регекспов, чтобы распарсить строчку версии программы, составленную из 4 чисел, на составляющие, созданные достаточно сложными правилами. habrahabr.ru/post/175187/

                                                    Как только увидел эту статью — естественно, пошёл тестировать сервис на своём примере. Оказалось, что он не все выражения регекспов корректно отображает. Незахватывающие скобки считает группой и отображает то, что относится к другой группе, относящимся к этим незахватывающим скобкам (?=0). Вывод: охватывает не все структуры в регекспах, поэтому годится не для каждого разбора выражений.

                                                    Конкретно, вот на этом выражении он неполноценно работает:
                                                    /(\d+)\.(\d{4})\.(\d{1,2})\.([1-3]0(?=0)|0?[1-3]0$|[1-3][1-9](?!0)|0?[1-9])(\d*|$)/
                                                    

                                                    И вот — расшаренная ссылка, куда я скопировал полностью примеры из статьи (20 строчек), которые у меня работает на джс-фиддле.
                                                    regexponline.com/s/we#sthash.GpUQK42k.92zmz1RF.dpuf, баги сервиса видны на (?=0) и (\d*|$);
                                                    фиддл: jsfiddle.net/spmbt/dk346/3/ с теми же примерами.

                                                    К вопросу о читабельности. В отличие от подхода этого сервиса, я представил регекспы в структурированном виде, прямо на фиддле, отчего можно оценить, насколько удобнее они читаются. И есть несколько примеров более сложных выражений в самой статье, которые со структуризацией читаются не намного сложнее. Подход сервиса, даёт понимание таких спллошных выражений — не хватает корректной работы с (?=x), (?!x),…

                                                    Результат собрал в одну строку, приведённую выше, и это читается заметно хуже.

                                                      0
                                                      Большое спасибо за фидбек! Баг действительно был, он устранён.

                                                      С проблемой читабельности я тоже сталкивался не раз, как один из возможных вариантов решения сделал кнопку «Expand regex» — попробуйте. Буду рад идеям об улучшении этой самой читабельности.
                                                      +1
                                                      Немного не по теме, но осмелюсь предложить посмотреть в сторону
                                                      www.regexbuddy.com/

                                                      Это офлайновая (под Windows) программа-редактор RE, но с богатым функционалом.
                                                      Меня в ней особенно подкупил режим отладки с возможностью сравнить по эффективности разные RE. Плюс подробная справка (на английском) по программе, регэкспам, и режимам отладки (с наглядными примерами).
                                                      Последняя версия вышла в марте.
                                                      Рекомендую. Правда удовольствие не бесплатное.

                                                      До этого пользовался различными онлайн вариантами и плагинами к Eclipse IDE. Теперь только «regexbuddy».
                                                        0
                                                        Вы правильно осмелились, ничего лучше не видел, как в плане анализа имеющихся regexp, особенно со всякими извращениями и с элементами синтаксиса, которые ты частенько забываешь, так и при создании / отладки. Однозначный must have.
                                                          0
                                                          Да, программа великолепная. Жаль, что только под винду :(
                                                            0
                                                            Еще я в ней люблю поиск и замену по регулярному выражению в файлах, она делает это быстро и четко.
                                                            0
                                                            Некорректно обрабатывается удаление тестируемых строк — они не исчезают из таблицы снизу. Может есть какое-то магическое действие, но я его не нашел.
                                                              +1
                                                              Да, баг. Спасибо, поправлю. В качестве временного решения можно нажимать F5 для перезагрузки страницы — это поможет.
                                                                0
                                                                Сработало, когда отредактировал единственную оставшуюся строку.
                                                                  +2
                                                                  Это я уже баг успел пофиксить.
                                                                0
                                                                1. Через некоторое время балования перестали работать кнопки добавления строки и редактирования регулярки. Помогла только перезагрузка страницы
                                                                2. Если я делал свою регулярку, потом решил посмотреть другие примеры, то хотелось бы вернуться в свою — в этот раз у меня не получилось… :(
                                                                  0
                                                                  спасибо. На счёт первого постараюсь выяснить, что могло случиться. Если у вас появится дополнительная информация как воспроизвести баг, напишите, пожалуйста. На счёт второго да, надо подумать, как лучше сделать.
                                                                  0
                                                                  Сунул ему простейшую регулярку… Ой. :)
                                                                  Кстати, как ввести новое регулярное выражение, не пользуясь мышкой? При переходе по табу на кнопку ok возвращается старое.
                                                                    0
                                                                    чтобы ваша простейшая регулярка поместилась на экран, надо уменьшить масштаб браузера по ctrl+- :-)
                                                                    там сейчас такая логика, что изменения в textarea отменяются при потере фокуса. Когда вы таб нажимаете, текстареа теряет фокус и изменения дискардятся. Видимо, надо придумать что-то более интуитивно понятное.
                                                                      0
                                                                      ctrl enter сделайте :)
                                                                        0
                                                                        и cmd+return тогда уж тоже!
                                                                          0
                                                                          У меня тоже мак, но я не воспользовался случаем выпендриться… ой, нет, только что воспользовался =)
                                                                        0
                                                                        Кстати, это RFC 2822 conformant регулярка для e-mail из Swift Mailer :)
                                                                        Там регулярки генерируются по частям в соответствии с ABNF из RFC, я сгенерированную сдампил.
                                                                      0
                                                                      А как добавить тестовую строку новую, если я до этого все удалил?
                                                                        0
                                                                        Раз уж можно давать подвыражениям имена, было бы неплохо иметь возможность их(подвыражения) редактировать отдельно. Тогда запись регулярного выражения станет похожа на небольшую программу или набор предложений формы Бэкуса—Наура. А итоговое полное выражение — результат препроцессинга: подстановки определенных в другом месте подвыражений с опциональным сохранением их имен.

                                                                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                        Самое читаемое