Большинство из нас, впервые столкнувшись с данной проблемой, начинают забивать в поисковых системах что-то типа: «regexp online generator» и к своему великому сожалению осознают что
А как же составить это самое регулярное выражение?
До недавнего времени существовало 2 ответа на этот вопрос:
- Изучить документацию по регулярным выражениям и составить регулярку самому
- Попросить кого-то более опытного сделать это за вас
Теперь, после нескольких месяцев разработки, рад представить и 3-й ответ:
» Генератор регулярных выражений
История
Давным давно, в одном проекте пришел довольно интересный и сложный запрос от внутренних пользователей. Персоналу технической поддержки нужно было самим задавать правила валидации для определенных полей, разным пользователям. Правила должны были часто и очень оперативно изменяться.
Как и любой хороший разработчик, ваш покорный слуга естественно начал с поиска уже готовых решений. Ничего подходящего не нашлось и пришлось приступить к очень примитивной реализации. На сложную, как обычно, не было ни средств ни времени.
Но эта проблема его очень сильно зацепила и вот теперь, наконец, он рад представить вам плоды своих трудов.
Начнем
Для начала решил сделать веб-сервис. Хотелось сделать максимально просто (для более широкого круга людей), чтобы своё правило для валидации смогли составить не только программисты, но и люди которые далеки от программирования (модераторы/администраторы).
Вот сам интерфейс:
Как и ожидалось, новому пользователю вообще ничего непонятно и поэтому пришлось разработать вводный интерактивный курс:
Всегда выступаю против модальных окон и попапов, но в этом случае мне кажется их все же целособразно использовать. Можно назвать это «приветственным сообщением».
А вот и сам интерактивный курс, точнее его часть:
Также вы можете включить отображение отдельных подсказок вне зависимости пройдете ли вы вводный курс, либо откажитесь от него.
А что же насчет функционала?
Первое что бросается в глаза — это «Примеры» и сделано это неспроста. Для начала, я настоятельно рекоммендую выбрать наиболее близкий для вашей задачи пример. Вы можете просто переключиться между некорректным и корректным вариантом для более простого понимания примеров. Затем можете изменить выбранный вами пример так, как сами пожелаете. Со временем список примеров будет расширяться:
Далее идет то, ради чего это всё и затевалось — сгенерированное Регулярное Выражение:
Здесь хотелось бы немного остановиться и рассказать подробнее.
С самого начала мне хотелось создать инструмент не ограничивающий пользователей в создании многосложных регулярок и в то же время сделать интерфейс максимально простым. А на деле, сколько раз кардинально изменялся интерфейс я уже и со счета сбился. Также пришлось несколько раз переписывать часть логики самого генератора (ядро). И не потому что архитектура была плохо продумана, а из-за того что некоторые варианты просто не были учтены. А вариантов — огромное множество.
Еще хотелось бы рассказать о возможностях. На данный момент можно создавать регулярку с группами/подгруппами, определять опциональные части (не обязательные), указывать конкретные символы (у остальных будет определяться тип), указать тип — «любой символ» и блокировать определенные символы в конкретной части регулярки. Вы можете довольно просто создать регулярку не только для слова, но и для словосочетания и даже предложения. Доступна генерация регулярок как на латинице и так на кириллице (по отдельности и вместе). По мере добавления дополнительных локализаций интерфейса, планируется поддержка регулярок и для других письменностей.
Кстати, не пугайтесь что регулярное выражение всегда красного цвета. Это не символизирует ошибку, а сделано лишь для того, чтобы акцентировать ваше внимание на этой крайне важной информации.
Далее по порядку идет «Тестовое поле»
Здесь происходит проверка введенного тестового значения на соответствие сгенерированному регулярному выражению. И происходит она «на лету». Ничего нажимать не нужно. Тем самым вы можете гораздо быстрее и удобнее проверить множество вариантов.
Под полем ввода отображается описание автоматически сгенерированного правила.
Есть вариант с описанием правила в виде ошибки, когда введенное тестовое значение не соответствует сгенерированному правилу/регулярке:
На данном примере видно как срабатывает проверка на заблокированные символы:
- "@" до второй "@";
- "--" в любой части имени домена второго уровня;
- "-" в самом конце домена второго уровня, непослредственно перед символом ".";
Описание заблокированных символов в правиле отображается не очень понятно. Чуть позже оно будет приведено к такому же виду как и описание основной части правила.
Также есть вариант с описанием правила в отдельном блоке, когда введенное тестовое значение соответствует сгенерированному правилу/регулярке:
Хотелось бы разъяснить значение цветов с частями правила:
- зеленый — правильно
- желтый — опционально
- красный — некорректно
Сгенерированное регулярное выражение может иметь не только обязательные части, но также и опциональные. Хочу также отметить, что автоматическое описание правила делалось именно для будущего плагина, но отлично показало себя и в данном веб-сервисе.
Ядро (UI)
Вот и наконец мы добрались до последнего блока по порядку, но не по значению. Я лично считаю этот блок — ядром всего сервиса. Именно здесь Генератор получает все необходимые входные данные, которые впоследствии обрабатывает и выдает уже готовый результат. Кстати, вся логика реализована только на клиенте. Веб сервис вообще не имеет серверного кода.
Вначале крайне важно понять что машина
Здесь можно очень долго и нудно рассказывать что и как нужно вводить, но мне кажется это будет намного проще понять с помощью примеров, которых там довольно много. И вообще, материала с описанием как и что работает хватит еще на одну большую статью.
А ты не забыл сохраниться?
После того, как мы нажали кнопку «Генерировать», у нас сгенерировалось регулярное выражение. Теперь мы можем сохранить его. На всякий случай хочу уточнить что сохраняется оно только в памяти браузера (localstorage).
При нажатии на кнопку «Сохранить» появляется диалоговое окно:
Вы можете вручную ввести описание для правила или переключиться на автоматическое описание как в примере ниже. Также вам нужно ввести название для правила:
Этот функционал был разработан с расчетом на будущий плагин, но пригодился и в данном веб-сервисе.
На самом деле, как в случае с примерами так и с пользовательскими правилами, сохраняется не сгенерированное правило, а просто входные данные и каждый раз когда вы переключаете правило — срабатывает логика генератора. Это очень удобно при исправлении багов в логике самого генератора. Тем самым даже сохраненные правила будут работать с последней версией уже исправленного генератора.
Дополнительные возможности
Я расположил их по приоритету:
- Автоматическое сохранение данных в Url параметры. И происходит это сразу же после нажатия на кнопку «Генерировать», либо при переключении примеров или сохраненных правил. Вы можете скинуть кому-то ссылку и при открытии страницы другой пользователь увидит именно то, что вы вводили раннее. Это довольно удобно.
- Полная локализация всего контента. Существующие модули локализации мне сильно не нравились, поэтому ваш покорный слуга создал свой
велосипедочень простой модуль. Всего десяток строк кода. Выбранный язык cчитывается из Url и записывается в Url, сохраняется в Localstorage. Особенно приятно добавлять новые языки, т.к. текст берется только из одного очень простого JSON файла для соответствующего языка. Отдал файлик переводчикам — получил еще один язык.
- Извещение о новой версии приложения. Данный веб-сервис — это одностраничное веб приложение (буквально). Из личного опыта знаю что пользователь может месяцами не перезагружать одностраничное приложение и это как раз правильно. Но что делать если вышла новая версия? Как известить об этом пользователя? — Очень просто. Был разработан модуль, который опрашивает сохраненный JSON файл с заданным интервалом времени и как только записанная новая версия не соответствует предыдущей — показывается вот такое извещение:
Технологии
Вот основной стек технологий с помощью которого удалось всё это реализовать:
- TypeScript 2.0 + SystemJS
- Angular 1.5 (с компонентами)
- Angular-Material 1.x
- IntroJS
Код написан в полном Angular 2 Code Style (даже с декораторами), что в будущем позволит очень просто мигрировать (жду только Material2).
Заключение
В дальнейших планах — сделать полноценный плагин, который позволит задавать правила валидации одновременно для клиента и для сервера прямо из интерфейса. Мне кажется это окажется очень удобным и практичным решением. Затем можно развить эту идею и создать даже «Visual Form Builder» на основе как-бы стандарта: «JSON Schema», с которым мне пришлось поработать в свое время.
Если вы захотите сделать что-то аналогичное, я буду только за и даже помогу советами. Считаю что: «Сама идея практически ничего не стоит, стоит ее непосредственная реализация».
В заключение, хочу позволить себе небольшое отступление. Если ты разработчик-мечтатель, как и автор статьи, который получает кайф от своей работы, особенно когда она бросает тебе вызов и хоть немного, но все же решает проблемы других людей, тогда ты скорее всего на правильном пути. Хуже, когда такому человеку приходится гнаться за деньгами, какими-то материальными благами, чтобы соответствовать непонятным социальным стандартам или выполнять скучную, глупую и рутинную работу чтобы просто прокормить себя, свою семью. Кажется не правильным жертвовать своими мечтами, идеями, стремлениями и временем в угоду простым бумажкам. Но в то же время автор статьи никого не побуждает прямо сейчас всё взять и бросить. Каждый должен сделать свой выбор сам и когда для этого наступит действительно подходящее время.
Комментарии (62)
vlreshet
16.11.2016 18:43+5Выглядит красиво, но я не смог разобраться как там составить простейшую регулярку, при том что неплохо умею писать их вручную. Хотел бы я посмотреть на обычного юзера который там разберётся.
P.S. обычный юзер вообще не знает что такое Regex, и после того как что-то нащёлкает там — не сможет оценить правильность того что он получил.s-kozlov
17.11.2016 17:19+1Иногда неподготовленный пользователь разбирается лучше, чем подготовленный. Никогда не понимал, как люди в Microsoft Access что-то умудряются натыкивать.
afanasiy_nikitin
16.11.2016 18:54+10Ох я не завидую программистам, которым потом поддерживать эти user-generated регулярки…
Nagh42
16.11.2016 19:11+3Как уже написали выше, сложность изучения регулярных выражений сопоставима со сложностью вашего интерфейса (если не ниже). Поэтому везде находятся сервисы для проверки и объяснения уже составленных выражений, потому что они позволяют неискушенному пользователю визуально понять, что нужно сделать, что он сделал так, а что не так. Ради интереса, возьмите любого неподготовленного пользователя, выдайте ему в зубы задачу (например выделить в произвольном тексте email) и сайт вроде https://regex101.com/. Я уверен, что пользователь разберется с регэкспами (по-крайней мере на базовым уровне) быстрее, чем с вашим интерфейсом.
via-site
16.11.2016 19:23+1О части я с вами согласен.
С простыми пользователями возможно я погорячился. Но вот для программистов начального уровня и даже для некоторых среднего уровня, данный сервис будет более полезным. Мне так кажется.
Как я писал выше, первая проблема, встающая перед новичком — это: «А как вообще создать регулярку и как создать ее рабочей?». И тут он может немного сэкономить. Согласитесь, что на примерах всегда проще и быстрее учиться.
Особенно это актуально, когда просто нету на это целого «вагона» времени.
Для опытных разработчиков картина полностью противоположная. Мне и самому легче вручную составлять регулярки чем вводить примеры.Maccimo
17.11.2016 07:35На мой взгляд, для начинающих и продолжающих гораздо полезнее будут программы типа https://www.regexbuddy.com/
«А как вообще создать регулярку и как создать ее рабочей?».
Правильный ответ — найти статью, объясняющую основы регулярных выражений, после усвоения которой продолжать тренироваться и курить мануалы.via-site
18.11.2016 18:11-1Простите. Но следуя вашей логике, все мы должны еще программировать на Ассемблере и писать код не в IDE, а в консоли.
Я серьезно.
Зачем нам высокоуровневые абстракции?
Зачем нам GUI, если есть консоль?
Зачем что-то вообще автоматизировать/улучшать/облегчать?
Зачем вообще прогресс?Maccimo
21.11.2016 23:16Не очень понятно, как из моего «стоит знать инструмент, который используешь» получилось ваше «долой прогресс».
Программист, который рассчитывает не на собственные знания, а на онлайн-сервис, который сгенерирует регулярное выражение за него, очень рискует. Сервис рано или поздно прекратит существование и такой программист останется у разбитого корыта с, теперь бесполезными, знаниями интерфейса этого сервиса.
Dexif
22.11.2016 17:42«Не истери!» — Сказал бы мой знакомый…
Сколько фронтендеров приходит собеседоваться которые умеют jQuery, но не умеют Vanilla JS. Люди изучают фреймворки не изучая основы, а потом жалуются на то, что всё тормозит и ускорить приложение нельзя.
Инструментами для ускорения разработки пользоваться определённо надо. Главное чтобы эти инструменты не мешали работе приложения.
Это я к тому что надо знать основы, чтобы знать что и почему происходит. И знать где подкрутить чтобы всё начало летать, а не ползать. Это вам скажет любой разработчик highload сервиса. А регулярки частенько бывают причиной тормозов. Достаточно вспомнить wordpress(хотя не знаю что у них сейчас там, но раньше был регулярный ад).
Fox_exe
16.11.2016 19:13Продуманно не правильно. Зачем вообще нужны регулярки? Чтобы выдернуть из строки/текста некие данные.
Значит и «Автогенератор» надо было делать примерно так:
1. Искомая строка
2. Массив данных, которые мы бы хотели выдрать
Тоесть:
1. Имя Фамилия Отчество
2. Фамилия
Regex: [а-ЯёЁ]+\s+([а-ЯёЁ]+)\s+[а-ЯёЁ]+\s+
(Или просто "([а-ЯёЁ]+)" и забирать второй элемент из результата)via-site
16.11.2016 19:33+1Нет. Эти регулярки работают со строками/текстом, которые приходят нам от пользователя. Не важно на клиенте это или на сервере. Наша задача — проверить что введенные данные действительно соответствуют нашим ожиданиям (регулярке).
s-kozlov
17.11.2016 17:22Ага, ага. Зачем вообще нужны программы? Чтобы взять исходные данные и вернуть другие. Берем и пишем такую программу — задача искусственного интеллекта решена.
leschenko
16.11.2016 19:16+5С такими генераторами очень легко получить такую ситуацию.
encyclopedist
16.11.2016 19:32Да, а ещё: бывают фамилии, начинающиеся со строчной, фамилии содержащие пробел, содержащие дефис, апостроф, и т.д.
samodum
16.11.2016 19:23+4>Практически в 100% случаев нам совершенно не нравится их составлять
Практически в 100% случаев программистам нравится составлять регулярки.
А вот красивости программистам не нужны. Достаточно консолиs-kozlov
17.11.2016 17:23Практически в 100% случаев программистам нравится составлять регулярки
За себя, пожалуйста, говорите.bask
18.11.2016 02:35К автору поста вопросов нет?
s-kozlov
18.11.2016 06:40Нет
samodum
18.11.2016 23:28То есть, когда автор поста говорит «Практически в 100% случаев нам совершенно не нравится их составлять», то вопросов к нему нет, а ко мне есть? Оооокей.
Будь более последовательным и логичным в своих рассуждениях, падаван.s-kozlov
19.11.2016 09:09А что тут спрашивать, когда я с ним согласен, причем не только насчет себя лично.
KlimovDm
19.11.2016 10:54-1я с ним согласен, причем не только насчет себя лично
А вы «за себя, пожалуйста, говорите» ©. Не кажется вам странным оставлять себе возможность говорить за других, при этом отказывая в этом праве оппонентам? Будь более последовательным и логичным в своих рассуждениях ©
a1111exe
18.11.2016 10:57+1А я поддерживаю. Кайф от использования regex в Perl трудно описать человеческим языком.
KlimovDm
16.11.2016 19:31+2Практически в 100% случаев нам совершенно не нравится их составлять, считая это побочной работой, не связанной с программированием.
Нравится/не нравится — вопрос интимный. Но… Разработчики! Поднимите руку, кто считает, что работа с регулярками — побочная и не связана с программированием?via-site
16.11.2016 19:35+1Понял свою ошибку. Только холиваров не надо!
KlimovDm
16.11.2016 21:35Да, холиваров не надо, это точно. Я просто пытался понять, кому может реально пригодится ваш сервис.
Явно, что вы писали его не для себя — автор такого проекта должен быть сам с регулярками на «ты».
Отбросим программистов, которые по специфике решаемых задач вообще не работают с регулярками.
Программисты, работающие с регулярками — тоже нет (сужу по себе).
Начинающие программисты, которые ужаснулись, впервые столкнувшись с регулярными выражениями? Так для них такой сервис — вреден :) — учиться надо.
В общем я некотором замешательстве. Хотелось бы ошибиться, но мне кажется, что проект (достаточно серьезный) построен на ошибочном начальном предположении о «практически 100%»gooddaytoday
17.11.2016 12:05Такой сервис будет очень полезен аналитикам, которые работают с Enterprise платформами анализа данных. Они не программисты, регулярки писать не умеют, но им надо. Отправил ссылку на сервис нашим.
via-site
18.11.2016 10:43Как и писал в статье, именно от таких сотрудников и пришел первоначальный запрос на подобный функционал.
ildarz
17.11.2016 13:16> Я просто пытался понять, кому может реально пригодится ваш сервис.
Вообще говоря, любым людям, которым иногда надо писать регулярки. В таких случаях синтаксис за пределами базового обычно не запоминается, и, чтобы каждый раз не лезть в справочник, удобно иметь генератор (если он удобный :)).
90h
16.11.2016 20:20+2Но… Разработчики! Поднимите руку, кто считает, что работа с регулярками — побочная и не связана с программированием?
Как пользователь Linux могу сказать что чаще использую регулярки в делах не связанных с программированием.
Для форматирования/обрезания выхлопа консольных утилит, например.
Кроме того многие редакторы/IDE умеют поиск/замену по регуляркам, при этом подсвечивают куски текста и даже показывают результат будущей замены в подсказке. Что очень удобно.
И да, мне нравятся регулярки :)
vlad230596
16.11.2016 19:59Удобство интерфейса для пользователя хотелось бы получше, а то слишком много всего.
Кстати, в примерах неверное регулярное выражение для IP адреса: числа не могут превышать 255.via-site
16.11.2016 20:11Про интерефейс полностью согласен. Надеюсь на большое число конструктивных отзывов.
IP — спасибо, пропустил.
vitaly_KF
16.11.2016 20:01+1Круто! Только хорошо было бы положить исходники на github, чтоб можно было всегда развернуть в своей сети.
А то веб сервисы бывает перестают существовать через некоторое время. Да и можно будет делать пулл-реквесты с улучшениями.
И еще хак — если там все на JS, то можно кажись на гитхабе создать статичный сайт, он будет вечный)via-site
16.11.2016 20:17https://uiregex.firebaseapp.com/ru — настоящий урл сервиса. Тоже «вечный» и бесплатный. А тот короткий — просто зеркало.
На гитхабе хостинг одностраничных приложений на порядок хуже чем в Firebase (нет html5Mode, настроек кэширования файлов, редиректов ...)
4eyes
16.11.2016 20:33На правах зануды:
Как водится, пример регулярки для email — неправильный.
Контрпримеры:
- user@192.168.1.1
- konishiwa+hello@world.co.uk
via-site
16.11.2016 20:38-2Да. Эти варианты в примере скорее всего будут полезны. Добавлю, спасибо.
Знаю что есть еще вариант доменов на кириллице или других письменностях, но указывать их все в примере — это уже перебор.
90h
16.11.2016 21:11+1user@192.168.1.1
konishiwa+hello@world.co.uk
В RegExr, про который ниже писал, пример валидации выглядит так:
/^(?:(?:[\w`~!#$%^&*\-=+;:{}'|,?\/]+(?:(?:\.(?:"(?:\\?[\w`~!#$%^&*\-=+;:{}'|,?\/\.()<>\[\] @]|\\"|\\\\)*"|[\w`~!#$%^&*\-=+;:{}'|,?\/]+))*\.[\w`~!#$%^&*\-=+;:{}'|,?\/]+)?)|(?:"(?:\\?[\w`~!#$%^&*\-=+;:{}'|,?\/\.()<>\[\] @]|\\"|\\\\)+"))@(?:[a-zA-Z\d\-]+(?:\.[a-zA-Z\d\-]+)*|\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\])$/
:)
Написано что валидирует все примеры из вики, кроме вариантов с IPv6.timukas
17.11.2016 18:24Меня \d{1,3} не устравивает для валидации ип адресов. Потому что 456.23.892.21 попадает под эту регулярку.
Я использую "(?<![0-9])(?:(?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]))(?![0-9])"
saboteur_kiev
16.11.2016 20:36+2Я не совсем понял, как именно вы упростили интерфейс, но… в тренинг центре нашей компании я подготовил небольшой курс по регуляркам и прочитал его студентам уже несколько раз.
А на вашем сайте я не смог составить простейшую регулярку с бэкреференсом, потратив целых 5 минут…
Jogger
16.11.2016 20:36+1Я мог бы быть целевой аудиторией. Потому что регулярные выражения использую достаточно редко, чтобы успеть забыть синтаксис, и потому каждый раз вынужден перечитывать документацию. Но. Во-первых, как уже сказали — интерфейс нисколько не интуитивен. Мне проще каждый раз перечитать документацию по регэкспам, чем каждый раз перечитать инструкцию к подобному сервису. Да и полезнее пожалуй, может со временем запомнится. Во-вторых — проверка валидации — только одна из задач, решаемых с помощью регэкспов, что делает использование этого инструмента ещё более неоправданным.
Так что я в смятении — с одной стороны, я благодарен даже за попытку облегчить жизнь таким людям как я, с другой — облегчения как-то не наступило(
webhamster
16.11.2016 20:41Зависает крипт на странице при попытке входа на нее. Вешается весь браузер. Firefox 33.
90h
16.11.2016 20:56Есть такая полезная штука как awesome lists — сборник всяких полезностей и туториалов. Вот там, кроме уже упомянутого RegEx101, нашел еще RegExr — с
блэкджеком и ...примерами, хинтами и «выбором сообщества».
Есть еще RegExpBuilder, очень похоже на то что описано в посте, только библиотека для JS.
Может кому пригодится.via-site
18.11.2016 18:34Простите. Но сравнивать Генератор с тестером — это как сравнивать программиста с тестировщиком.
Не спорю, тестировщики у нас с огромным опытом работы из-за этого ценятся они у нас они очень высоко.
Но что что конкретно они создают? Что они будут тестировать, если у нас не будет ни одного программиста, даже самого молодого, которой только начал работать?
Да, программист только начал свою работу. Он еще не опытен, еще не всё умеет делать, допускает ошибки, но в перспективе его ценность гораздо выше любого тестеровщика, даже самого продвинутого.
Надеюсь теперь, наконец, станет понятна та мысль, которую я хотел донести с самого начала.
alexeyw
17.11.2016 03:14-2На мой взгляд, идеальный визуальный генератор должен выглядеть так:
Пользователь выделяет часть текста и генератор показывает ему выражение для такого выделения с опциями длины групп и наборов символов.Deosis
17.11.2016 07:27К сожалению, не сработает.
Как в таком редакторе указать, что длина должна быть четной?
Первая версия регулярного выражения будет либо слишком ограниченной и тогда придется добавлять множество вариантов граничных случаев.
Либо она будет слишком широкой, и граничные случаи придется отсекать.
При таких итерациях формула будет переходить от одного состояния ко второму.
KlimovDm
17.11.2016 07:45+1Вы говорите об ИИ :) Регулярки не ограничиваются наборами символов и длинами групп. И, как правило, за ними есть формализованная сущность. Прекрасный пример выше — email. Мало выделить email в тексте, надо еще дать генератору набор ссылок на соответствующие RFC :)
alexeyw
17.11.2016 08:02Ну это само собой, как без этого, кому нужны регулярки вида \w+. А ещё что-бы предлагал на выбор не одно, а несколько возможный регулярных выражений. И конечно выделение другого блока текста чтобы модифицировало выражение с учетом всех раннее выделенных.
sayanlar
17.11.2016 13:03Прочитал руководство, не могу понять самого главного: как все-таки написать регекс средствами вашего приложения? Пока могу только pcre-строкой занести…
via-site
17.11.2016 13:10Для работы, если это не точное правило, нужны как минимум примеры с «пограничными» значениями. Например, это могут быть строки минимальной и максимальной длины,…
Чем больше будет примеров для того, что вы действительно хотите провалидировать — тем лучше будет результат (в теории).
Vcoderlab
17.11.2016 13:11Здравствуйте. Идея очень интересная.
Мне иногда (как уже писали выше, достаточно редко, что к следующему разу успеваю забыть, как это делается) бывает нужно пропустить какой-нибудь конфигурационный файл через grep, чтобы отфильтровать комментарии (строки, начинающиеся с "#") и вывести только значащие строки. Это сильно упрощает поиск параметров среди обилия комментариев. Подскажите пожалуйста, как составить такую регулярку с помощью вашего сервиса.via-site
17.11.2016 13:18По некоторым комментариям, уже понял свое упущение.
Сейчас работает только режим валидации. Нужно будет добавить еще несколько режимов работы. Чуть позже добавлю еще возможность фильтрации тестовых данных на основе сгенерированной регулярки.
90h
17.11.2016 13:19бывает нужно пропустить какой-нибудь конфигурационный файл через grep, чтобы отфильтровать комментарии
cat /path/to/file | grep -v '#'
или
cat /path/to/file | grep -v '^#'
fekrado
17.11.2016 13:40Очень хороший сервис есть http://txt2re.com/ Выручал много раз!!! Причем сразу регулярку переводит в программный код.
AstRonin
24.11.2016 09:36в общем-то круто, только сделайте генерацию, плиз, чуток поумнее :)
eEe.mail@google.com
/^[a-z]{1}[A-Z]{1}[a-z]{1}[.]{1}[a-z]{4}[@]{1}[a-z]{6}[.]{1}[a-z]{3}$/
т.е. фактически это не сработает для
eee.mail@google.com
eE.mail@google.com
и т.д…
было бы не плохо увидеть хотя бы так (заменил [a-zA-Z]):
/^[a-zA-Z]+[.]{1}[a-z]{4}[@]{1}[a-z]{6}[.]{1}[a-z]{3}$/
ну так далее…
регулярка в общем-то нужна, чтоб находить вариации в тексте, если находить только точные совпадения, то нафига регулярка тогда вообще нужна…
Gray_Wolf
Хоть вы и старались упростить интерфейс всё равно получилась КДПВ из поста.
Неподготовленному пользователю данный интерфейс никак не поможет, а подготовленному он и не нужен.
Да и не совсем я понимаю пользу от валидации без замены…
via-site
Простой интерфейс — это была моя самая большая боль. Пробовал разные варианты, но на данный это максимум что я смог получить.
Если у кого есть предложения по упрощению, тогда только рад буду данной информации.
P.S. пожалуйста, только не предлагайте пределать в простой tester, т.к. цель именно не в ручном в создании регулярки.
evnuh
Программирование мышкой состоит всегда из двух этапов — нащелкивание мышкой / ввод с клавиатуры и отображение результата.
В вашем случае по центру должно быть поле, где юзер нащелкивает мышкой/вводит параметры регулярки, а под ним — текст с получившейся регуляркой. Ну и где-нибудь спрятаны опции всякие разные, за раскрывающимся блоком.