Регулярные выражения в SQLite
Регулярные выражения — пожалуй, самый мощный инструмент обработки текста без программирования.
По умолчанию SQLite не поддерживает «регулярки». Но вы легко можете включить их с помощью расширения sqlean-regexp
.
Примечание. В отличие от других СУБД, добавить расширение в SQLite элементарно. Скачиваете файл, выполняете одну команду — и готово.
С sqlean-regexp
проверять текст по шаблону одно удовольствие:
-- сколько сообщений содержат цифры
select count(*) from messages
where msg_text regexp '\d+';
-- 42
Проверка по шаблону и замена в тексте
Люди решают с помощью «регулярок» три основные задачи:
- Проверить строку на соответствие шаблону.
- Извлечь часть строки, подходящую под шаблон.
- Заменить все части строки, подхощие под шаблон.
sqlean-regexp
предоставляет по отдельной функции для каждой из этих задач.
regexp_like(source, pattern)
Проверяет, соответствует ли строка шаблону.
select regexp_like('встретимся в 10:30', '\d+:\d+');
-- 1
select regexp_like('встретимся в кино', '\d+:\d+');
-- 0
regexp_substr(source, pattern)
Извлекает часть строки, которая соответствует шаблону.
select regexp_substr('встретимся в 10:30', '\d+:\d+');
-- 10:30
select regexp_substr('встретимся в 17:05', '\d+:\d+');
-- 17:05
regexp_replace(source, pattern, replacement)
Заменяет подходящие под шаблон фрагменты строки на строку замены.
select regexp_replace('пароль = "123456"', '"[^"]+"', '***');
-- пароль = ***
select regexp_replace('1 2 3 4', '[2468]', 'чет');
-- 1 чет 3 чет
Синтаксис шаблонов
sqlean-regexp
поддерживает достаточно навороченный синтаксис, включая разные группы, ленивые квантификаторы и look-around:
select regexp_substr('нынче 2020 год', '(\d{2})\1');
-- 2020
select regexp_substr('нынче 2021 год', '(\d{2})\1');
-- (null)
select regexp_substr('1 2 3 2 4 5', '.*2');
-- 1 2 3 2
select regexp_substr('1 2 3 2 4 5', '.*?2');
-- 1 2
select regexp_substr('новый год', '(\w+)\s(?=год)');
-- новый
select regexp_substr('прошлый год', '(\w+)\s(?=год)');
-- прошлый
Юникод тоже поддерживается — для русского языка это особенно актуально.
Установка
Скачайте свежий релиз
Подключите в командной строке SQLite (
sqlite.exe
):
sqlite> .load ./regexp
sqlite> select regexp_like('abcdef', 'b.d');
Как установить расширение для IDE, Python и других сценариев.
Документация расширения с подробным описанием.
★ Подписывайтесь на новые заметки.