Комментарии 14
Приятная статья, спасибо.
Другим промоблогам надо учиться у мейл.ру.
А разве перевод — это заведомо что-то плохое?
Ну хотя о чем это я, ты ж любитель говна на вентилятор накидать :) Это я про «Другим промоблогам надо учиться»
Дело в том что я стал в последнее время более-менее регулярно почитывать хабр. И обратил внимание, что качество контента ниже плинтуса. Неважно, переводного или оригинального.
И вот на этом фоне данная статья, хоть сама по себе и не представляет из себя ничего выдающегося, но хотя бы не обычный для этого ресурса адЪ. Вот именно этот факт я и захотел отметить. Как раз чтобы немного разбавить репутацию любителя набросить :) Хотя я не любитель. Просто я как тот мальчик из анекдота, пишу только когда суп пересолен.
А если говорить о переводах, то тут просто добавляется ещё один фактор риска — кроме исходно некачественного контента добавляется еще и никакое качество перевода. Но так-то, в самом по себе факте перевода никакого криминала нет.
Что касается символов ?: для незахватывающих групп — разве это не усложняет восприятие шаблона? Ну захватится группа, да и ладно. Цель то — улучшить читаемость.
до
preg_match('/^https:\/\/example.com\/path/i', $uri);
после
preg_match('#^https://example.com/path#i', $uri);
Однако их можно разрешить, используя модификатор J
Этот модификатор появился только в PHP 7.2, а до этого нужно было добавлять (?J)
в начало регулярного выражения.
(это предупреждение для тех, кому приходится обеспечивать обратную совместимость с более старыми версиями PHP)
Почему то в статьях про регулярки никто не освещает такую, иногда, удобную фичу, как константы http://www.rexegg.com/regex-disambiguation.html#define
Тогда вместо
/[a-zA-F0-9]/
пишем:
/[[:xdigit:]]/
Ошибочка: Не /[a-zA-F0-9]/, а /[a-fA-F0-9]/. Ну и сокращения в этом случае не происходит. Даже наоборот — становится длиннее.
Если же поменять ограничитель на “#”, регулярное выражение станет гораздо понятнее, так как в нем не будет экранированных символов:
preg_match('#^https://example.com/path#i', $uri);
Точка — спецсимвол и её нужно заэкранировать. Так что один экранированный символ всё-таки будет.
Как в PHP улучшить читаемость регулярных выражений