Comments 17
Спасибо за статью.
Я очень люблю регулярки.
Полюбить их я смог после вот этого поста на хабре:
https://habr.com/ru/articles/224799/
Как-то для себя открыл утилиту RegexBuddy, в ней есть чуть больше чем надо, от обработки данных, до тестирования регулярок и готового сниппета в любой доступный ЯП.
Не обижайтесь, но если Вы хотели сделать обучающий материал для новичков, то статья получилась очень слабой в этом плане.
Есть большое количество качественных обучающих материалов по регулярным выражениям, которые не приводят учебные примеры по парсингу строк вроде dfd123
- если статья для обучения новичков, то такие примеры строк текста мозг поломают.
С картинками примеров я даже не сразу понял, что сначала написан входной текст, потом регулярное выражение, а потом подсветка найденных совпадений. Можно убрать с картинок входной текст, а оставить только регулярку и подсвеченное совпадение.
Вы делаете слишком категоричные заявления, например, что .
- это любой символ, кроме начала строки - это не так, всё зависит от флага m
;
^
и $
- аналогично зависит от флага s
;
заявление, что REGEX_LIKE
принимает 2 аргумента - тоже не корректно и может ввести в заблуждение. Эта функция может принять и третий аргумент.
Если цель - научить чему-то, то лучше выбрать узкую тему и излагать материал последовательно, а не прыгать по разным темам.
Регулярное выражение начинаем с «[\s^]» — это значит, что результат должен начинаться либо с пробела, либо с начала строки
Возможно, в PG/SQL особая обработка данного выражения, но скорее всего символ ^
в данном случае является литералом, а не мета-символом начала строки.
Лучше бы Вы сконцентрировались на реальных кейсах, которые использовали и в которых регулярные выражения спасли Вам кучу времени, такие кейсы воодушевят новичков учить регулярные выражения и гуглить качественные обучающие материалы.
Возможно, в PG/SQL особая обработка данного выражения, но скорее всего символ
^
в данном случае является литералом, а не мета-символом начала строки.
Никто не изобретал велосипед.
SELECT regexp_instr('123^abc','[\s^]');
возвращает 4.
Уточню, что spacer это может быть еще и символ табуляции, и да, ^ в данном случае должен быть просто литералом.
Регулярное выражение начинаем с «[\s^]» — это значит, что результат должен начинаться либо с пробела, либо с начала строки
Вот тут мозг немного сломался, так как ^ в квадратных скобках имеет особое значение.
То есть конструкция [^^] означает любой символ кроме начала строки?
То есть конструкция [^^] означает любой символ кроме начала строки?
Нет, конечно. Второй символ ^ в данном случае воспринимается литерально - именно как символ крышки. Хотя никто не мешает подстраховаться и написать [^\^] - уж тут точно никаких сомнений не будет.
Если надо "не с начала строки", то можно, например, поступить наивно и сказать, что между началом строки и искомым фрагментом есть хотя бы один символ: ^.+{паттерн}
так как ^ в квадратных скобках имеет особое значение.
Только если он идет в начале
[^d] и [d^] - совершенно разные, прочти противоположные значения
Вы делаете слишком категоричные заявления, например, что
.
- это любой символ, кроме начала строки - это не так, всё зависит от флагаm
;
^
и$
- аналогично зависит от флагаs
;
Правила для регулярок могут быть различными в зависимости от языков программирования. Это базовая теория без привязки к технологии.
заявление, что
REGEX_LIKE
принимает 2 аргумента - тоже не корректно и может ввести в заблуждение. Эта функция может принять и третий аргумент.
Я не утверждаю, что у нее вообще не может быть больше аргументов, это касается только рассматриваемого примера.
Возможно, в PG/SQL особая обработка данного выражения, но скорее всего символ
^
в данном случае является литералом, а не мета-символом начала строки.
В статье указан другой язык, это pl/sql. Да, здесь это символ действительно будет как просто символ, а не начало строки.
Мне в свое время хорошо помогла разобраться с регулярками книга Дж. Фридла "Регулярные выражения". Пока читала различные статьи, в голове все-таки не так хорошо укладывалось, а после прочтения книги стало понятно.
Для меня всегда регулярки были штукой, используешь классно, не используешь забыл как используешь
У меня не получилось регуляркой сделать диапазон исключения с символьным классом, для какого стандарта данная статья ?
например исключить \d или _
[^\d_]
Мне как сетевому инженеру регулярки без преувеличения - очень помогли в автоматизации. Любая задача с данными вроде анализа и обработки с возможным последующим конфигурированием - без RegEx становится на порядок сложнее.
Статья не ТОП, конечно, но всё равно спасибо за внимание к теме.
Регулярные выражения в реальных задачах