Pull to refresh
  • by relevance
  • by date
  • by rating

Тонкости роутинга в Zend Framework

Zend Framework
Задача — сделать профиль пользователя доступным через example.com/user/username и через пользовательский поддомен username.example.com. Задача простая и с помощью Zend Framework решается парой строк кода. Трудности начались тогда, когда я решил действия регистрации, подтверждения регистрации, востановления пароля и собственно входа/выхода поместить в тот же контроллер, который выводит профиль пользователя. Теперь возникла задача научить контроллер не воспринимать example.com/user/register как пользователя.
Читать дальше →
Total votes 9: ↑8 and ↓1+7
Views3.2K
Comments 10

Вступление

Regular expressions
Был удивлён, не обнаружив подобного блога на Хабре. Ничего, постараемся восполнить этот пробел. В этом блоге я планирую как можно проще описать работу регулярных выражений, более склоняясь к полному разбору часто используемых примеров. Так же, в планах, рассказать об особенностях разных движков выражений, и их реализации в популярных языках программирования.

Для начала, поговорим о том, что такое регулярные выражения, и каково их практическое применение.
Читать дальше →
Total votes 125: ↑94 and ↓31+63
Views3.7K
Comments 61

Сверхжадные квантификаторы

Regular expressions
В статье Regexp — это «язык программирования». Основы была поставлена задача: написать регулярное выражение, находящее в цепочке символов текст в двойных кавычках, причем внутри кавычек "..." могут быть и сами символы ", если они экранированы обратным слэшем, например:
one two "foo:=\"quux\"; print" three "four"
Здесь наш регекс должен найти соответствие цепочке
"foo:=\"quux\"; print"
Автором (той статьи) было предложено такое решение:
/ " ( \\" | [^"] )* " /x
(здесь и далее синтаксис Perl; ключ /x означает, что пробелы в регексе не учитываются, мы добавили их лишь для наглядности, чтобы части регекса не слились в единый «модемный шум»).
Этот регекс работает в том случае, когда есть совпадение (текст в кавычках). Проблема же в том, что он находит текст в кавычках даже тогда, когда текста в кавычках (согласно нашим правилам экранирования обратным слэшем) просто нет. Например, в цепочке "\" регекс находит соответствие (равное всей строке "\" ), хотя его быть не должно: кавычка открыта, экранированная кавычка… а вот закрывающей-то кавычки нет.
Ситуацию легко исправить, исходную задачу решить несложно, внеся несколько простых изменений в регекс… но речь не об этом, а о том, что если у вас в руках современный инструмент, т. е. движок регексов (свежая версия Perl, Java или PHP с PCRE), то вы можете «исправить» описанный регекс, добавив в него всего лишь 1 символ. Какой? Куда? Почему? Если знаете ответы, то читать дальше вам не стОит ;-)
Читать дальше →
Total votes 63: ↑59 and ↓4+55
Views13K
Comments 21

Атомарная группировка, или Ни шагу назад!

Regular expressions

0. Присказка


В некотором царстве, в некотором государстве жил-был программист. Звали его, как полагается, Иван. Был он настоящим спецом, обладал всеми Тремя Великими Добродетелями Программиста, то есть был ленив, спесив и нетерпелив. Случилась в том царстве печаль великая: кризис. И выгнали Ваню с работы без выходного пособия. Горевал Ваня долго, а потом собрался с духом и разослал резюме по всему белу свету. Долго ли, коротко ли, вызвали Ваню на собеседование. Требований к соискателю было много, но главное — требовалось хорошо владеть регулярными выражениями. До собеседования — почти месяц, готовься — не хочу. Будучи человеком серьёзным, готовиться Иван решил обстоятельно. 3 недели и 3 дня он лежал на печи, почитывал Хабр и думал, как же неслыханно обстоятельно он будет готовиться. До собеседования остался 1 день. Ванюша мысленно обругал работодателей, которые назначают собеседование так скоро, что совсем подготовиться не успеваешь, слез с печи, сдал пивные бутылки и на вырученные деньги купил книжку по регексам. Читал он её до полного изнеможения, пока не отключился. Утром мы найдём сонную физиономию Ванюши лежащей, как на подушке, на этой самой книжке под Хабракатом.
Читать дальше →
Total votes 87: ↑86 and ↓1+85
Views13K
Comments 42

Точная проверка Email адреса регулярным выражением

Lumber room
Как все знают, один из самых удобных способов проверки e-mail адреса является регулярные выражения. Недавно пришлось столкнулся с проблемой максимально точной проверки адресов. Данная проверка была необходима в системе автоматической рассылки спама опросников, где каждый список адресов подгружался автоматически одним большим файлом. Требовалось исключить максимальное количество заведомо невалидных адресов.
Проблема заключалась в том, что все шаблоны проверки е-мэйла, которые можно встретить в интернете, МСДН и других источниках не удовлетворяли требованиям проверки. Обратившись к первоисточникам в виде RFC 2821 и RFC 2821, я выяснил как же точно и правильно валидирвоть адреса.
Читать дальше →
Total votes 47: ↑35 and ↓12+23
Views770
Comments 57

Регулярные выражения. Сборник рецептов

Lumber room
Мы каждый день работаем с текстом, решая разные задачи. Проверяем текст на правильность ввода некоторых данных, ищем, заменяем некоторые значения, выделем некоторые данные из текста. Порой объём этих данных значительно возрастает и справиться с такими объёмами текстовой информации за актуальный промежуток времени не получается.

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

Сегодня я хотел бы познакомить вас с книгой Яна Гойвертса и Стивена Левитана «Регулярные выражения. Сборник рецептов», которая поможет вам понять как работать с регулярными выражениями.

Читать дальше →
Total votes 94: ↑62 and ↓32+30
Views3.3K
Comments 49

Основы Linux от основателя Gentoo. Часть 2 (1/5): Регулярные выражения

Configuring Linux
Translation

Предисловие


Об этом самоучителе


Добро пожаловать в «Азы администрирования», второе из четырех обучающих руководств, разработанных чтобы подготовить вас к экзамену 101 в Linux Professional Institute. В данной части мы рассмотрим как использовать регулярные выражения для поиска текста в файлах по шаблонам. Затем, вы познакомитесь со «Стандартом иерархии файловой системы» (Filesystem Hierarchy Standard или сокр. FHS), также мы покажем вам как находить нужные файлы в вашей системе. После чего, вы узнаете как получить полный контроль над процессами в Linux, запуская их в фоновом режиме, просматривая список процессов, отсоединяя их от терминала, и многое другое. Далее последует быстрое введение в конвейеры, перенаправления и команды обработки текста. И наконец, мы познакомим вас с модулями ядра Linux.



В частности эта часть самоучителя (Часть 2) идеальна для тех, кто уже имеет неплохие базовые знания bash и хочет получить качественное введение в основные задачи администрирования Linux. Если в Linux вы новичок, мы рекомендуем вам сперва закончить первую часть данной серии практических руководств. Для некоторых, большая часть данного материала будет новой, более опытные же пользователи Linux могут счесть его отличным средством подвести итог своим базовым навыкам администрирования.


Читать дальше →
Total votes 47: ↑38 and ↓9+29
Views60K
Comments 35

Разбор исходного кода языков программирования и языков разметки

Programming
..it is true that asking regexes to parse arbitrary HTML is like asking Paris Hilton to write an operating system..

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

Что такое PEG?


В отличии от других инструментов для создания парсеров, PEG описывает не грамматику, а стратегию её разбора, но фактически описание стратегии разора является описанием грамматики. Для парсера описанного с помощью PEG существует алгоритм (packrat), разбирающий любой текст, удовлетворяющий грамматике из этого класса, за линейное время от длинны текста.

Класс языков, которые можно разобрать с помощью парсеров описанных подобным образом, достаточно широк, чтобы покрыть популярные языки программирования (например, C#) и языки разметки. Очевидно, что он покрывает всю функциональность регулярных выражений.
Про PEG для Nemerle и других .Net языков
Total votes 36: ↑33 and ↓3+30
Views9.7K
Comments 15

Пишем whois-клиент под Android

Development for Android
Логотип

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

Под катом я расскажу о ходе разработке, покажу примеры работы и варианты развития.
Читать дальше →
Total votes 44: ↑36 and ↓8+28
Views5.3K
Comments 27

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

Shells
    Занялся я как-то оптимизацией скорости работы своего скрипта. Алгоритм был уже вовсю отполирован, распараллелен и выполнялся уже более чем за сносное время. Лишь изредка, облизывая части кода, шебурша места, использующие внешние команды и приводя в благоухающую гармонию встроенными командами оболочки, обращал внимание на застоявшуюся роль труженика — потокового редактора sed, всё так же старательно обрабатывавшего регулярные выражения в моём расцветающем скрипте.
Существует множество мест, где люди грызут друг другу глотки и отстаивают честь своего любимого редактора в грозной войне sed vs awk vs grep vs …
Тем не менее, большинство знает, что замена вызовов внешних команд на внутренние зачастую значительно ускоряет критические места скрипта, заставляет улыбаться автора, тратя меньше его времени на ожидание за чашкой кофе «пока закончится обработка». Это, в некотором смысле, некоторая неадекватность, если он знает язык Си и может значительно ускорить программу переписыванием кода на Сях; но не следует сразу записывать его в сумасшедшие — некоторые скрипты довольно объемны для переноса кода и используют различные команды, заставляя код пухнуть от нахальных вставок системных вызовов exec().
    Итак, как бы то ни было, разработчики bash третьей версии наделили нас возможностью пользоваться встроенными регулярными выражениями внутри команды [[ при помощи =~.
Большинство результатов на гугление про такую способность bash выносят один и тот же вердикт — «пользоваться регулярными выражениями внутри bash — моветон».
В данной статье я попытаюсь вынести вердикт, насколько всё плохо (а оно действительно как-то нехорошо).
Читать дальше →
Total votes 34: ↑34 and ↓0+34
Views40K
Comments 6

Доставка свежей прессы с помощью Python прямо в почтовый ящик

Python
Sandbox
Tutorial
В данной статье будут освещены следующие возможности python'a:
  • парсинг web-страницы с помощью простого регулярного выражения;
  • скачивание файла с web-страницы;
  • отправка скаченного файла через smtp-сервер;
  • написание небольшого обобщающего скрипта.

Все это будет сопровождено работающими примерами.
Читать дальше →
Total votes 30: ↑26 and ↓4+22
Views17K
Comments 21

Прекратите проверять Email с помощью регулярных выражений!

ProgrammingRegular expressions
Translation
Серьезно, прекратите. Это пустая трата времени и сил. Поищите регулярку для проверки Email в Google, взгляните на нее — и захочется отойти подышать свежим воздухом. Вспоминается одна очень известная цитата:

Некоторые люди, сталкиваясь с проблемой, думают: «О, я воспользуюсь регулярными выражениями».
Теперь у них две проблемы.

Джэйми Завински, regex.info
Читать дальше →
Total votes 272: ↑231 and ↓41+190
Views280K
Comments 237

PyRegs: анализатор регулярных выражений Python 3

Python

Когда не стало Kodos


Беда пришла неожиданно. Из Debian Wheezy изъяли старый, добрый PyQt3. А с ним на покой отправился и Kodos — мой любимый дебаггер регулярных выражений Питона. Много лет он помогал тестировать красивые и жуткие конструкци и тот факт, что apt-get install kodos больше не работает, вызвал желание немедленно исправить это досадное недоразумение.
Читать дальше →
Total votes 32: ↑31 and ↓1+30
Views7.2K
Comments 2

С регулярно наступающим Новым годом вас!

Abnormal programmingRegular expressions
Наткнувшись на занятную головоломку на тему регулярных выражений, конечно же я не смог пройти мимо:

regex.alf.nu

В честь наступающего Нового года я набрал в ней 2014 очков. Кто больше?

Мои варианты ответов
Plain strings
^(.*oo[^k])|foo$

Anchors
.+ick$

Ranges
^[a-f]{2,}[^m]$

Backrefs
(\w{3}).*\1.*

Abba
^(?!.*?(\w)\1).*$|ef

A man, a plan
^(\w)(\w).*\2\1$

Prime
^x(xx+?)\1+$

Four
(\w).*\1.*\1.*\1

Order
^[^o].{1,5}$

Triples
00

Glob
\*(\w+).+\S\1|(\w+)\*.+\1

Balance
((<)\2)\1

Power
^((((((((((x)\10?)\9?)\8?)\7?)\6?)\5?)\4?)\3?)\2?)\1?$

Total votes 61: ↑50 and ↓11+39
Views15K
Comments 41

Regex и Win cmd, простенький пример

Web design
Sandbox
Заметил, что здесь много сложных и интересных статей про Win cmd и Regex, но гораздо меньше чего-то простого, с чего можно начать знакомство с этими мощными инструментами.
Идея написания этого урока возникла, когда я понял, что наверняка такие же задачи пытается решить еще кто-то и возможно такая статейка поможет кому-нибудь поменять рутинный копи-паст на гораздо более интересный и технологичный метод написания кода.

Итак, вводная:

Читать дальше →
Total votes 15: ↑6 and ↓9-3
Views16K
Comments 16

Кроссворд из RegEx

JavaScriptRegular expressions
Crossword Наткнулся в интернете на очередную игру для программистов.
На этот раз объектом издевательств стали регулярные выражения — авторы сделали Regex Crossword, где вместо вопросов — набор регулярных выражений.
Описание и правила под катом
Total votes 56: ↑47 and ↓9+38
Views18K
Comments 35

Изучаем алгоритм работы регулярных выражений в Ruby

RubyAlgorithmsRegular expressions
Translation

Согласно Википедии, Oniguruma означает «колесница дьявола» в переводе с японского.

Мы все знакомы с регулярными выражениями. Они являются «швейцарским армейским ножом разработчика». Что бы вы ни искали, какой бы текст ни разбирали, вы всегда можете сделать это используя регулярные выражения. На самом деле, вероятно, вы начали использовать их гораздо раньше, чем стали использовать Ruby — они уже давно включены в большинство популярных языков программирования: Perl, JavaScript, PHP, Java и прочие. Ruby появился в середине 1990-х годов, тогда как регулярные выражения еще в 1960-х, то есть почти на 30 лет раньше!

Но как на самом деле работают регулярные выражения?
Читать дальше →
Total votes 22: ↑22 and ↓0+22
Views15K
Comments 11

Регулярные выражениия в Java на примере адреса электронной почты

ProgrammingJava


Известно, что регулярные выражения – это, по сути, шаблоны из символов, которые задают определённое правило поиска. И, среди прочего, с их помощью возможно осуществить проверку определённой строки или строк на соответствие некоему заранее заданному паттерну или стандарту.
Одним из наглядных и довольно простых примеров использования регулярных выражений в Java и не только является проверка проверка данных пользователя, ввёдённых при регистрации на определённом сайте на корректность. В первую очередь это касается адреса электронной почты, так как к нему всегда предъявляются определённые орфографические требования.
Читать дальше →
Total votes 21: ↑7 and ↓14-7
Views30K
Comments 23