Как стать автором
Поиск
Написать публикацию
Обновить
15.31

Регулярные выражения *

Формальный язык поиска

Сначала показывать
Порог рейтинга
Уровень сложности

К 8 марта — 8 женских докладов c наших конференций

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров2.2K

Женщины играли заметную роль в программировании, начиная с Ады Лавлейс. Поэтому сегодня (как и всегда) в нашем блоге — никаких слов про «украшения офиса», а только программирование, только хардкор. 

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

Ада Лавлейс одобряет!

REcollapse: фаззинг с использованием unicode-нормализации

Уровень сложностиСложный
Время на прочтение6 мин
Количество просмотров4.2K

В этом посте я расскажу о технике REcollapse. Я изучал её последние пару лет, чтобы обнаружить до странности простые, но эффективные уязвимости в защищённых объектах. Эта техника может быть использована для захвата учётных записей с нулевым взаимодействием, обнаружения новых обходных путей для брандмауэров веб-приложений и многого другого.

Этот пост преимущественно основан на моём выступлении на BSidesLisbon 2022 и посвящён запуску инструмента REcollapse, который теперь доступен на GitHub. Это также то, что мы начали исследовать внутри Ethiack.

Всё начинается с непредвиденного ввода.

?

Хватит использовать [a-zа-яё]: правильная работа с символами и категориями Unicode в регулярных выражениях

Уровень сложностиСредний
Время на прочтение14 мин
Количество просмотров10K

Unicode – это набор символов, целью которого является определение всех символов и глифов всех человеческих языков, живых и мертвых. Поскольку всё больше и больше программ должны поддерживать несколько языков или просто любой язык, юникод в последние годы приобретает всё большую популярность. Использование различных наборов символов для разных языков может быть слишком обременительным для программистов и пользователей.

К сожалению, юникод привносит свои требования и подводные камни, когда речь заходит о регулярных выражениях. Но в дополнение к сложностям, он также приносит и новые возможности.

?

Методология генерации случайных строк посредством регулярных выражений

Время на прочтение5 мин
Количество просмотров3.5K

Привет, Хабр!

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

Читать далее

Что такое катастрофический возврат и как регулярное выражение может стать причиной ReDoS-уязвимости?

Время на прочтение8 мин
Количество просмотров7.7K

Регулярные выражения – очень полезный и удобный инструмент для поиска и замены текста. Однако в некоторых случаях они могут привести к зависанию системы или даже стать причиной уязвимости к ReDoS-атакам.

Читать далее

Декомпозируем регулярные выражения

Время на прочтение7 мин
Количество просмотров7.1K

Хороший код читается легко, как проза. Многие книги учат нас тому, как важно делить код на небольшие, повторно используемые, легко потребляемые блоки.

Но почему-то, в случае с регэкспами у программистов как будто появляется слепое пятно на чувстве стиля. Вот такая регулярка – совершенно обычное дело:

/^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.]((19|20)\d\d)$/

А чо не так-то?

Регулярки (regex) — основы для решения кейсов, про которые не пишут в статьях про основы

Время на прочтение4 мин
Количество просмотров25K

"Там просто регулярку написать" - говорили они...

Читать далее

PowerShell: проверка совмещения имен БЭМ-сущностей на одном HTML-узле

Время на прочтение15 мин
Количество просмотров1.2K

При написании HTML-страницы по методологии БЭМ («Блок, Элемент, Модификатор») БЭМ-сущности привязываются к узлам HTML-дерева. В предыдущих статьях я рассматривал, как можно выполнить в скрипте на языке PowerShell проверку правильности написания названий БЭМ-сущностей по отдельности с помощью регулярных выражений.

В этой статье рассмотрено, какие есть правила для совмещения нескольких имен БЭМ-сущностей на одном узле HTML-дерева и как соблюдение этих правил можно проверить в скрипте на языке PowerShell. Приведены иллюстрации фрагментов результатов работы скрипта в разных случаях, при обнаружении разных ошибок.

Читать далее

PowerShell: распознавание БЭМ-сущностей на HTML-странице

Время на прочтение5 мин
Количество просмотров2.4K

Распознавание типов БЭМ-сущностей (блок, элемент, разные виды модификаторов) в скрипте на языке PowerShell с помощью простых регулярных выражений.

Предполагается, что скрипт получает файл с кодом на языке HTML, разбирает его (парсит) и определяет типы БЭМ-сущностей, привязанных к узлам HTML-дерева, после чего выводит информацию об этом в окно терминала (консоли). Приведена иллюстрация того, как может работать подобный скрипт. Такой инструмент можно использовать для изучения методологии БЭМ самому или обучения этой методологии других.

Читать далее

PowerShell: классическая схема именования в БЭМ и регулярные выражения

Время на прочтение10 мин
Количество просмотров3.3K

В методологии БЭМ, которую используют для создания сайтов, существует соглашение (схема) по именованию классов CSS (БЭМ-сущностей), которые привязывают к HTML-элементам HTML-дерева. Я рассматриваю классическую схему именования классов CSS по методологии БЭМ, а также — как создать функцию на языке PowerShell для проверки (валидации) имен БЭМ-сущностей на ошибки.

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

Приведена иллюстрация, как может работать (какой результат может выдавать в консоль) такой скрипт-валидатор.

Читать далее

Как работают регулярные выражения, или Движок regex с анимацией

Время на прочтение5 мин
Количество просмотров16K

К старту курса по Fullstack-разработке на Python показываем, как работают регулярные выражения, на примере их движка с визуализацией, которую вы видите на КДПВ. Под катом подробности и код.

Читать далее

Re2j вместо стандартного regEx в Java: в каких случаях и как использовать

Время на прочтение6 мин
Количество просмотров4K

Всем привет! Я Даниил, java разработчик в Just AI, и в этой статье я расскажу, как мы столкнулись с проблемой backtracking’а в регулярных выражениях и как ее решили с помощью библиотеки re2j.

Читать далее

Полетели типографировать

Время на прочтение2 мин
Количество просмотров4.3K

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

Читать далее

Ближайшие события

Обработка текста с помощью textutils с примерами

Время на прочтение8 мин
Количество просмотров3.2K

Набор утилит для потоковой обработки текста появился уже в первых версиях Unix и доступен практически везде. Это такие команды как cat/tac, head/tail, cut, grep, sed, sort, uniq, wc, nl, fmt. Каждая из этих утилит выполняет свою простую обработку текста, но комбинируя их в конвейере, т.е. передавая стандартный вывод одной команды на вход следующей, можно обрабатывать тексты произвольного размера или быстро решить некоторые задачи.

Для этого нужно усвоить несколько приемов

Regex for lazy developers

Время на прочтение9 мин
Количество просмотров24K

Регулярные выражения для ленивых людей?!

Regex – это модуль вашего языка программирования который позволяет работать со сложными и большими строками просто! Давайте разбираться в них вместе. Приятного прочтения ;)

Читать далее

Реализация простого механизма регулярных выражений в 70 строк кода

Время на прочтение7 мин
Количество просмотров7K

Эта короткая статья обязана одному интересному тестовому заданию, в котором требовалось реализовать базовый функционал утилиты grep на языке PHP, не используя никаких встроенных функций по работе с регулярными выражениями.

Строка с шаблоном должна была включать поддержку следующих метасимволов:

^ - начало строки

$ - конец строки

. - любой символ

* - 0 или более раз

? - 0 или 1 раз

+ - 1 или более раз

Так же нужно было поддерживать экранирование метасимволов при помощи '\', чтобы по ним возможно было производить поиск. В результате, получившаяся утилита занимает порядка ста строк кода, из которых 70 - это функции регулярных выражений. 

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

Читать далее

Одним db.odbc.get запросом в базу реализовывается discovery метрик и разнесение данных по метрикам

Время на прочтение3 мин
Количество просмотров3K

Получение несколько десятков параметров запросом в базы oracle, автоматическая разведка (discovery) метрик и наполнение их данными, и все за один запрос к базе

Читать далее

Обезболиваем RegEx

Время на прочтение5 мин
Количество просмотров11K

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

Можно ли вообще не использовать регулярные выражения? А в каких случаях нельзя? Что делать, если использовать все-таки приходится? Предлагаю разобраться с этим. Определим ситуации, когда регулярные выражения можно не использовать, когда нужно использовать и как сделать так, чтобы не было мучительно больно к ним возвращаться.

Читать далее

Регулярные выражения. Всё проще, чем кажется

Время на прочтение7 мин
Количество просмотров127K

Всем доброго времени суток. Сегодня хочу рассказать максимум о регулярных выражениях: что они из себя представляют, как их писать, для чего нужны и т.д.

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

Читать далее

Да хватит уже писать эти регулярки

Время на прочтение7 мин
Количество просмотров18K

Здравствуйте, меня зовут Дмитрий Карловский и раньше я тоже использовал Perl для разработки фронтенда. Только гляньте, каким лаконичным кодом можно распарсить, например, имейл:


/^(?:((?:[\w!#\$%&'\*\+\/=\?\^`\{\|\}~-]){1,}(?:\.(?:[\w!#\$%&'\*\+\/=\?\^`\{\|\}~-]){1,}){0,})|("(?:((?:(?:([\u{1}-\u{8}\u{b}\u{c}\u{e}-\u{1f}\u{21}\u{23}-\u{5b}\u{5d}-\u{7f}])|(\\[\u{1}-\u{9}\u{b}\u{c}\u{e}-\u{7f}]))){0,}))"))@(?:((?:[\w!#\$%&'\*\+\/=\?\^`\{\|\}~-]){1,}(?:\.(?:[\w!#\$%&'\*\+\/=\?\^`\{\|\}~-]){1,}){0,}))$/gsu

Тут, правда, закралось несколько ошибок. Ну ничего, пофиксим в следующем релизе!

Шутки в сторону