Как стать автором
Обновить
1
Рейтинг

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

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

Сначала показывать
  • Новые
  • Лучшие
Порог рейтинга
  • Все
  • ≥0
  • ≥10
  • ≥25
  • ≥50
  • ≥100

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

PHP *Программирование *Регулярные выражения *

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

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

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

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

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

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

? - 0 или 1 раз

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

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

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

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

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

Системное администрирование *Oracle *PostgreSQL *IT-инфраструктура *Регулярные выражения *

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

Читать далее
Рейтинг 0
Просмотры 524
Комментарии 0

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

Блог компании TINKOFF Разработка веб-сайтов *JavaScript *Регулярные выражения *Лайфхаки для гиков

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

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

Читать далее
Всего голосов 22: ↑17 и ↓5 +12
Просмотры 6.7K
Комментарии 32

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

Регулярные выражения *
Из песочницы

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

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

Читать далее
Всего голосов 49: ↑45 и ↓4 +41
Просмотры 36K
Комментарии 71

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

Ненормальное программирование *JavaScript *Совершенный код *Регулярные выражения *TypeScript *

Здравствуйте, меня зовут Дмитрий Карловский и раньше я тоже использовал 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

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

Шутки в сторону
Всего голосов 42: ↑31 и ↓11 +20
Просмотры 13K
Комментарии 32

Как в PHP улучшить читаемость регулярных выражений

Блог компании Mail.ru Group PHP *Алгоритмы *Регулярные выражения *
Перевод
Tutorial

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

PHP использует диалект регулярных выражений PCRE — до версии PHP 7.3, и PCRE2 — в более новых версиях. Поэтому в PHP можно использовать различные продвинутые приемы, помогающие писать читаемые, самодокументируемые и поддерживаемые регулярные выражения. При этом не надо также забывать и о наличии в PHP функций фильтрации переменных, а также семейства функций ctype*, позволяющих валидировать такие распространенные значения как url-ссылки, адреса электронной почты и строки из букв и цифр — вообще без использований регулярный выражений. Во многих IDE есть подсветка регулярных выражений, помогающая их читать, а иногда даже и проверка выражений, с подсказками по их улучшению.

Читать далее
Всего голосов 39: ↑37 и ↓2 +35
Просмотры 5.5K
Комментарии 14

Продолжаем интернационализацию поиска по адресам с помощью Sphinx или Manticore. Теперь Metaphone

Поисковые технологии *Open source *Sphinx *Алгоритмы *Регулярные выражения *

Это продолжение публикации «Интернационализация поиска по городским адресам. Реализуем русскоязычный Soundex на Sphinx Search», в которой я разбирал, как реализовать поддержку фонетических алгоритмов Soundex в Sphinx Search, для текста написанного кириллицей. Для текста на латинице поддержка Soundex уже есть. С Metphone аналогично, для латиницы есть, для кириллицы не очень, но попытаемся исправить этот досадный факт с помощью транслитерации, регулярных выражений и напильника.

Это прямое продолжение, в котором разберём как реализовать оригинальный Metaphone, русский Metaphone (в том смысле что транслитерация не понадобится), Caverphone, и не сможем сделать Double Metaphone.

Реализация подойдёт как для использования на платформе Sphinx Search, так и Manticore Search.

В конце, посмотрим как Metaphone воспримет "ракомакофон".

Продолжаем...
Всего голосов 1: ↑1 и ↓0 +1
Просмотры 1.3K
Комментарии 2

Галопом по основам Regex

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


Регуля́рные выраже́ния (англ. regular expressions) — формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов (символов-джокеров, англ. wildcard characters). Для поиска используется строка-образец (англ. pattern, по-русски её часто называют «шаблоном», «маской»), состоящая из символов и метасимволов и задающая правило поиска. Для манипуляций с текстом дополнительно задаётся строка замены, которая также может содержать в себе специальные символы.

Регулярные выражения — Википедия
Читать дальше →
Всего голосов 17: ↑5 и ↓12 -7
Просмотры 5.2K
Комментарии 5

Интернационализация поиска по городским адресам. Реализуем русскоязычный Soundex на Sphinx Search

Поисковые технологии *Open source *Sphinx *Алгоритмы *Регулярные выражения *

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

А как часто лично вы оказывались в такой ситуации, в незнакомом городе в другой стране?

Появление смартфонов и приложений для навигации решило много проблем. Ура, можно посмотреть свою геолокацию, можно найти куда идти, прикинуть в каком направлении и даже проложить маршрут.

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

В публикации опишу как реализовать фонетические алгоритмы поиска Soudex на движке Sphinx Search. Одной транслитерацией здесь не обойдётся, хотя и без неё никуда. Получившийся конфигурационный файл, доступен на GitHub Gist.

Длиннопост
Всего голосов 8: ↑8 и ↓0 +8
Просмотры 1.3K
Комментарии 6

Регулярные выражения (regexp) — основы

Тестирование IT-систем *Регулярные выражения *

Регулярные выражения (их еще называют regexp, или regex) — это механизм для поиска и замены текста. В строке, файле, нескольких файлах... Их используют разработчики в коде приложения, тестировщики в автотестах, да просто при работе в командной строке!

Чем это лучше простого поиска? Тем, что позволяет задать шаблон.

Например, на вход приходит дата рождения в формате ДД.ММ.ГГГГГ. Вам надо передать ее дальше, но уже в формате ГГГГ-ММ-ДД. Как это сделать с помощью простого поиска? Вы же не знаете заранее, какая именно дата будет.

Читать далее
Всего голосов 59: ↑51 и ↓8 +43
Просмотры 85K
Комментарии 62

Еще раз о регекспах, бэктрекинге и том, как можно положить на лопатки JVM двумя строками «безобидного» кода

Блог компании Mail.ru Group Java *Регулярные выражения *
Из песочницы

Раннее утро, десятая чашка кофе, безуспешные попытки понять почему ваше клиентское (или еще хуже – серверное) java-приложение намертво зависло при вычислении простого регекспа на небольшой строке… Если подобная ситуация уже возникала в вашей жизни, вы уже наверняка знаете про бэктрекинг и темную сторону регулярных выражений. Остальным – добро пожаловать под кат!

Читать далее
Всего голосов 38: ↑36 и ↓2 +34
Просмотры 9.6K
Комментарии 8

Как перестать бояться и полюбить регулярные выражения

Блог компании Миландр Регулярные выражения *

В работе и повседневной жизни мы буквально окружены текстами: книги и статьи, письма и чаты, веб-страницы и программный код. Да что там — сама биологическая жизнь основана на ДНК. И для эффективной работы по поиску или модификации текста уже давно был придуман мощный инструмент — регулярные выражения, или regex. Однако по ряду причин далеко не все их используют, или имеют дело с ними только когда заставили при крайней необходимости. В этой статье я попытаюсь исправить эту печальную ситуацию.



Чтобы функции отыскать, воедино созвать и единою чёрною волей сковать.
Читать дальше →
Всего голосов 34: ↑31 и ↓3 +28
Просмотры 17K
Комментарии 26

Классифицируем ошибки из PostgreSQL-логов

Блог компании Тензор PostgreSQL *SQL *Регулярные выражения *Администрирование баз данных *
Посвящается всем любителям анализировать логи.

В логах работающих систем рано или поздно появляются тексты каких-то ошибок. Чем таких систем больше в обозримом пространстве, тем больше вероятность ошибку увидеть. Серверы PostgreSQL, которые находятся под нашим мониторингом ежедневно генерируют от 300K до, в неудачный день, 12M записей об ошибках.

И такие ошибки — это не какой-то там «о, ужас!», а вполне нормальное поведение сложных алгоритмов с высокой степенью конкурентности вроде тех, о которых я рассказывал в статье про расчет себестоимости в СБИС — все эти deadlock, could not obtain lock on row in relation …, canceling statement due to lock timeout как следствие выставленных разработчиком statement/lock timeout.

Но есть ведь и другие виды ошибок — например, you don't own a lock of type ..., которая возникает при неправильном использовании рекомендательных блокировок и может очень быстро «закопать» ваш сервер, или, мало ли, кто-то периодически пытается «подобрать ключик» к нему, вызывая возникновение password authentication failed for user …

[источник КДПВ]

Собственно, это все нас подводит к мысли, что если мы не хотим потом хвататься за голову, то возникающие в логах PostgreSQL ошибки недостаточно просто «считать поштучно» — их надо аккуратно классифицировать. Но для этого нам придется решить нетривиальную задачу индексированного поиска регулярного выражения, наиболее подходящего для строки.
Читать дальше →
Всего голосов 9: ↑9 и ↓0 +9
Просмотры 2.1K
Комментарии 6

Умное добавление музыкальных групп в Google Таблицы через VK API, Tampermonkey и Telegram бота

Программирование *Регулярные выражения *API *Хранилища данных *
Tutorial
Как организовать хранилище музыкальных групп в Google Таблицах с поддержкой с разных программ?


Дано: Аккаунты в Google, VK, Telegram.
Задача: Создать хранилище музыкальных групп с возможностью удобного пополнения.
Инструменты: Google Apps Script (GAS), VK API, Tampermonkey, Telegram Bot API.
Смотрим далее
Всего голосов 11: ↑11 и ↓0 +11
Просмотры 3.8K
Комментарии 0

Добавление тысяч клипов в плейлист YouTube с канала Telegram

Регулярные выражения *API *Google API *
Из песочницы
Tutorial
С приобретением телевизора с функцией просмотра YouTube и с подпиской на множество каналов Telegram, где ежедневно выкладываются клипы захотелось убрать лишние движения между мобильным телефоном и телевизором для просмотра очередного свежего контента.



Идея проста:

  • Дано: Один или несколько контент-мейкерских каналов Telegram с ежедневным выкладыванием новейших клипов.
  • Задача: Создать плейлист на своём YouTube со всеми этими клипами и автоматический отлов новых.
  • Инструменты: Google Apps Script (GAS), YouTube API

Как я это сделал?
Всего голосов 9: ↑8 и ↓1 +7
Просмотры 5.2K
Комментарии 2

Скрываем часть номера телефона

JavaScript *Регулярные выражения *
Представьте, что вам нужно скрыть часть номер под звездочками. Заменить +79999999999 на +799****9999 не трудно, а теперь представьте, что масок номеров не одна, а на много больше, номера эти как российские, так и канадские или любые другие. В этой функции я постарался захватить как можно больше номеров.
Читать дальше →
Всего голосов 22: ↑15 и ↓7 +8
Просмотры 9.2K
Комментарии 20

PHP и регулярные выражения: азы для новичков

Блог компании OTUS PHP *Регулярные выражения *
Tutorial
В преддверии старта нового потока по курсу «Backend-разработчик на PHP», а также смежного с ним курса «Framework Laravel», хотим поделиться статьей, которую подготовил наш внештатный автор.

Внимание! данная статья не имеет отношения к программе курса и будет полезна только для новичков. Для получения более углубленных знаний приглашаем вас посетить бесплатный двухдневный онлайн интенсив по теме: «Создание Telegram-бота для заказа кофе в заведении и оплаты онлайн». Второй день интенсива будет проходить тут.




Всем привет! Всех с наступившим [20]{2,}0 годом. Сегодня я хочу затронуть тему, которая иногда является темой для шуток от «Да зачем тебе все это учить, если есть уже есть готовые решения» до «может тебе еще и весь Perl выучить?». Однако время идет, множество программистов начинают осваивать регулярные выражения, а на Хабре нет ни одной свежей (хоть регулярные выражения не слишком изменились за последнее время) статьи на этой тематику. Пришло время написать ещё одну!
Читать дальше →
Всего голосов 23: ↑21 и ↓2 +19
Просмотры 48K
Комментарии 9

Проходим челлендж от Callum Macrae на 100%

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

Предлагаю попробовать решить 10 regex тестов от Callum Macrae. В отличии от моего предыдущего разбора челленджа, здесь нет откровенно простых и даже средних задач. Как говорится — только regex, только хардкор.


Так как челлендж довольно сложный, не обязательно следовать всем правилам как я, любое прохождение теста на 100% — означает что вы супер-профессионал. Welcome!

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


Поэтому выкладываю ещё раз, с подробным переводом, объяснением и всеми полагающимися плюшками.

Читать дальше →
Всего голосов 5: ↑5 и ↓0 +5
Просмотры 1K
Комментарии 0

Gorp.NET – новая библиотека для создания реверсивных шаблонов с целью извлечения данных из структурированного текста

Java *.NET *Data Mining *Регулярные выражения *API *
Gorp.NET – новая библиотека для создания реверсивных шаблонов с целью извлечения данных из структурированного текста, основанная на имеющейся кодовой базе Salesforce Gorp.
Читать дальше →
Всего голосов 7: ↑7 и ↓0 +7
Просмотры 2.6K
Комментарии 8

Как сделать поддержку PCRE2 для Apache 2.4

Регулярные выражения *Apache *
Из песочницы
Tutorial
Хочу поделится своим опытом перевода Apache 2.4 на PCRE2, так как даже PHP 7 уже давно поддерживает библиотеку PCRE2, а open source Apache Software Foundation все еще нет.
Конечно я сейчас наверно опережаю релиз Apache с поддержкой PCRE2, так как я использую исходники с гита Apache, что говорит нам о поддержке PCRE2 уже возможно в следующем релизе, но для тех кто уже сейчас хочет поддержку PCRE2 в Apache 2.4, и кто не хочет ждать релиза делюсь одним из способов.

Статья предполагает что вы собираете весь необходимый софт из исходников, список софта и версий на момент написания статьи:

PCRE2-10.33
APR 1.7.0
APR-util 1.6.1
Apache httpd 2.4.41


Шаг первый: собираем и компилируем PCRE2


Опустим момент скачивания исходников с оф источников так как это слишком очевидно, итак вы распаковали архив, переходим в папку с исходниками PCRE2, и выполняем следующую команду для поддержки UTF:

./configure --prefix=/etc/webserver/pcre2-1033 --enable-pcre2-8 --enable-pcre2-16 --enable-pcre2-32 --enable-unicode

В префиксе указываете свой путь если не хотите использовать стандартное расположение для установки библиотеки:

--prefix=/ваш/путь/до библиотеки

Иначе собираете без префикса.

Остальные команды указывают на включение поддерживающие 8-битный, 16-битный и 32-битный кодовые блоки PCRE, в данном варианте сборка была выполнена с ними.

Ну и конечно компилируем это дело при помощи последовательного выполнения команд:

make
make install

Если все норм и компиляция прошла без ошибок, переходим к следующему шагу.
Читать дальше →
Всего голосов 5: ↑5 и ↓0 +5
Просмотры 658
Комментарии 0

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