Как стать автором
Обновить
0

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

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

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

Регулярные выражения в реальных задачах

Уровень сложности Простой
Время на прочтение 11 мин
Количество просмотров 13K

Привет, Хабр! Меня зовут Татьяна, я разработчик в Росбанке, и в этом посте я расскажу про регулярные выражения. По своему опыту могу сказать, что регулярки — это очень полезный инструмент. Я часто пользуюсь ими, решая задачи по обработке текста в базах данных. Вначале я остановлюсь на теории, а затем рассмотрю несколько реальных задач, которые были решены с использованием регулярных выражений.

Читать далее
Всего голосов 21: ↑19 и ↓2 +17
Комментарии 17

Новости

Задачи про PEG-парсеры

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

Когда-то я хотел сделать контест по парсингу для Codeforces. Придумал задания двух типов:

1. Дается неформальное описание языка, по которому нужно создать грамматику (например, "язык с правильными скобочными последовательностями")

2. Даны примеры строк в языке, по которым нужно восстановить грамматику

У обоих типов заданий есть свои проблемы, так что контест я не сделал.

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

Читать далее
Всего голосов 5: ↑5 и ↓0 +5
Комментарии 0

Лучший regexp для Go. Benchmark c другими ЯП. Сравнение библиотек

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

"Не используйте регулярки - иначе вместо 1 проблемы, у вас их станет 2!" - как то так говорят знатоки... А что остается делать непослушным, желающим эффективный поиск по большому количеству шаблонов?

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

В этой статье мы рассмотрим альтернативы стандартной библиотеке для регулярных выражений в Go, проведем их бенчмарк по скорости и потребляемой памяти. А также с практической точки зрения рассмотрим различия между ними.

Читать далее
Всего голосов 14: ↑13 и ↓1 +12
Комментарии 8

Дерево Киви для поиска шаблонов по тексту

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

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

Читать далее
Всего голосов 2: ↑2 и ↓0 +2
Комментарии 5

Истории

Технические лайфхаки для конкурсов

Уровень сложности Простой
Время на прочтение 5 мин
Количество просмотров 1.3K

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

Узнать лайфхаки
Всего голосов 5: ↑4 и ↓1 +3
Комментарии 3

Регулярные выражения для JS (TS) juniors

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

Данная статья написана с уклоном на практическое применение регулярных выражений в проектах. Изначально написана для начинающих разработчиков в моей компании. Статья включает в себя примеры использования на JavaScript (TypeScript).

Читать далее
Всего голосов 8: ↑7 и ↓1 +6
Комментарии 2

Если вы отказались от регулярных выражений, то теперь у вас три проблемы

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

Известная шутка программистов гласит, что если решение вашей проблемы включает в себя парсинг текста при помощи регулярного выражения, то теперь у вас есть две проблемы. Некоторые программисты, прочитав шутку, решают попробовать иной подход. Возможно, регулярные выражения не так уж нужны. Возможно, задачу можно решить простым split строки или чем-то подобным. Однако другие могут задуматься немного глубже и задаться вопросом: «А если я сделаю нечто настолько дерзкое, что в результате получу три проблемы?» Мой пост написан в таком духе!

В нём используется код на Python, однако его легко можно адаптировать под любой язык с поддержкой функций высшего порядка.
Читать дальше →
Всего голосов 69: ↑67 и ↓2 +65
Комментарии 70

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

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

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

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

Ада Лавлейс одобряет!
Всего голосов 12: ↑8 и ↓4 +4
Комментарии 1

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

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

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

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

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

🔐
Всего голосов 22: ↑21 и ↓1 +20
Комментарии 0

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

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

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

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

🔣
Всего голосов 20: ↑20 и ↓0 +20
Комментарии 8

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

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

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

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

Читать далее
Всего голосов 3: ↑3 и ↓0 +3
Комментарии 8

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

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

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

Читать далее
Всего голосов 29: ↑28 и ↓1 +27
Комментарии 16

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

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

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

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

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

А чо не так-то?
Всего голосов 28: ↑20 и ↓8 +12
Комментарии 51

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

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

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

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

Читать далее
Всего голосов 44: ↑39 и ↓5 +34
Комментарии 47

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

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

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

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

Читать далее
Всего голосов 3: ↑3 и ↓0 +3
Комментарии 0

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

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

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

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

Читать далее
Всего голосов 6: ↑4 и ↓2 +2
Комментарии 0

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

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

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

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

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

Читать далее
Всего голосов 4: ↑4 и ↓0 +4
Комментарии 2

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

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

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

Читать далее
Всего голосов 22: ↑21 и ↓1 +20
Комментарии 17

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

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

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

Читать далее
Всего голосов 13: ↑12 и ↓1 +11
Комментарии 12

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

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

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

Читать далее
Всего голосов 9: ↑9 и ↓0 +9
Комментарии 13

Вклад авторов