Как стать автором
Обновить
  • по релевантности
  • по времени
  • по рейтингу

Получение текста из.doc. Как это лучше сделать?

Чулан
Встала передо мной небольшая задачка — поработать с различными файлами, в которых нерадивые пользователи присылают информацию о себе. Начав, со сбора статистики, я увидел страшную картину — изгаляются кто во что горазд. Присылают все, что только можно. Начиная от простых текстовых файлов (слава богам, есть в мире адекватные люди) и заканчивая презентациями в PowerPoint или Flash (а в таких людей я не верил вплоть до того момента, как сам увидел). Я, как не дурак, естественно решил привести все это многообразие к единому виду, обеспечивающим возможность человеко-машинной обработки. Не долго думая, я выбрал старый добрый html.
Различные презентации и картинки были отсеяны из алгоритма практически сразу — смысла городить огород не так уж и много, благо не столь часто попадаются эти прекрасные порождения креатива. Обработать из вручную не столь проблематично, как основной поток. Текстовые, html и т.п. файлы, в связи с выбором единого формата, можно было не затрагивать. А вот с прочими распространенными форматами, ясное дело, пришлось повозиться.

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

Маленькие шпаргалки всегда под рукой!

Чулан
По рыскал по своему винту и на ткнулся на архив со шпаргалками и решил выложить их. Может и понадобятся. :)
Удобно держать такие вещи под рукой!
image
Архив — 1мб
Всего голосов 33: ↑13 и ↓20 -7
Просмотры 1.2K
Комментарии 6

Выкусывание текстовой даты из абстрактной текстовой строки

Чулан
Это пока что пост-вопрос, я уже в процессе и обещаю поделиться наработками. Для одного из сервисов мне нужен некий механизм — мы даём пользователю возможность ввести дату в любом текстовом виде, но в момент парсинга должны точно понять, что он имел в виду. Задача немного упрощается тем, что всё происходит на английском языке. Например вот:
Читать дальше →
Всего голосов 7: ↑7 и ↓0 +7
Просмотры 399
Комментарии 17

Покорим Ruby вместе! Капля шестая

Программирование *
Сегодня мы с вами создадим наше первое полноценное приложение на Руби, попутно обучаясь новым методам классов String и File и регулярными выражениями.

Наше приложение: Текстовый анализатор


Собственно программа простая: она будет считывать текстовый файл, анализировать его по некоторым паттернам, считать статистику и выводить результат. Руби замечательно подходит для анализа документов и текстов с помощью регулярных выражений и методов scan и split. В этом приложении мы сконцентрируемся на простом и быстром программировании и не будем организовывать объектно-ориентированную структуру.
Читать дальше →
Всего голосов 49: ↑34 и ↓15 +19
Просмотры 24K
Комментарии 47

Архитектура YASS. Часть 2: выборка по CSS-селектору

JavaScript *
Статья о модульной загрузке была первой ласточкой в ряду заметок, в которых я собираюсь шаг за шагом рассказать, на каких принципах построена YASS, и каковы были результаты тестирования на максимальную производительность каждой части этой библиотеки. Но обо всем по порядку.

Постановка задачи



Насчет с самого простого: чего мы хотим добиться? Мы хотим, задав произвольную строку CSS-селектора, соответствующую спецификации, получить на выходе массив из всех элементов, соответствующих этой самой строке. Вроде пока все просто.

В качестве иллюстрации спецификации можно привести следующие примеры:

//вернет элемент с идентификатором my_id
querySelectorAll('#my_id')
//вернет все элементы с классом external
querySelectorAll('.external')
//вернет все абзацы на странице
querySelectorAll('p')


Однако уже тут можно отметить один момент: очень часто нам нужно выбрать просто элемент по его идентификатору или найти все элементы с определенным классом. Эти операции встречаются достаточно часто во всех JavaScript-библиотеках, поэтому они должны выполняться максимально быстро. Запускать весь механизм анализа входной строки селектора просто в том случае, когда нам нужно вернуть один-единственный элемент, заданный с помощью идентификатора, крайне неосмотрительно. Здесь мы можем воспользоваться принципом ленивого программирования: «не делай того, чего можно не делать», — и достаточно сильно ускорить работу для простейших случаев.
Читать дальше →
Всего голосов 25: ↑23 и ↓2 +21
Просмотры 852
Комментарии 41

Помогите разобраться с mod_rewrite

Чулан
Здравствуйте!
Прошу помощи в написании одного несложного правила перенаправления для mod_rewrite.

Требуется, чтобы для всех ссылок, запрашивающих любые элементы (графика, ситили, скрипты) действовало следующее правило перенаправления:
Если запрошен элемент, содержащий в адресе "../" допустим (../css/generic.css), перенаправить его на адрес: базовая_директория/view/[запрошенный_адрес] (css/generic.css).
Всего голосов 1: ↑0 и ↓1 -1
Просмотры 840
Комментарии 1

Named Capturing Group и Backreferences

Регулярные выражения *
Данная заметка не предназначена для начинающих изучать регулярные выражения, для начинающих я бы посоветовал книгу Ben Forta "Teach Yourself Regular Expressions in 10 Minutes" (ISBN: 0-672-32566-7).

Для тестирования и отладки регулярных выражений идеально подходит программа RegexBuddy (http://www.regexbuddy.com). Чтобы отлаживать следующие примеры нужно во вкладку Test скопировать HTML какой-либо страницы или вбить несколько тегов самим.

Задача — найти в HTML все теги IMG и вытащить из тегов значения атрибутов SRC и ALT.

Читать дальше →
Всего голосов 66: ↑57 и ↓9 +48
Просмотры 5.6K
Комментарии 46

Вступление

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

Для начала, поговорим о том, что такое регулярные выражения, и каково их практическое применение.
Читать дальше →
Всего голосов 125: ↑94 и ↓31 +63
Просмотры 3.7K
Комментарии 61

Валидация email

Регулярные выражения *
В этой статье рассмотривается валидация email изпользуя регулярные выражения. Все регэкспы выполняются с модификатором i, т.е. делают регистронезависимую проверку.
Читать дальше →
Всего голосов 100: ↑64 и ↓36 +28
Просмотры 133K
Комментарии 122

Регулярные выражения — символьные классы, конструкция выбора, метапоследовательности

Регулярные выражения *
В книге Дж. Фридла «Регулярные выражения» есть прекрасная табличка, которую хочу тут привести.
Регулярные выражения открывают широкие возможности для поиска и замены в любом тексте. Используя регулярные выражения можно гибко и просто обрабатывать текстовые документы. Одним из простейших применений регулярных выражений является поиск текста — во многих текстовых редакторах предусмотрена возможность поиска по шаблонам регулярных выражений В regexp существует несколько типов метасимволов выполняющих разные функции, давайте кратко их рассмотрим:
Читать дальше →
Всего голосов 43: ↑29 и ↓14 +15
Просмотры 13K
Комментарии 25

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

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

Как написать свой тег, аналог habracut? Просто и понятно!

Чулан
Ситуация. Пишем сайт, среди возможностей которых есть возможность создания своей статьи, своей новости. Новость/Статья должна иметь кнопку «Читать дальше».

Проблема. Как правильно организовать разделение на «краткий просмотр» / «Полный просмотр»?

Возможные решения. Создать 2 поле для ввода. В первом будет храниться часть статьи для «краткого просмотра», во втором «для полного». Создавать для этого 2 поля в таблице… я думаю не стоит.

Гораздо лучше создать свой тег, который будет разделять статью…

Объясню детальнее.
Читать дальше →
Всего голосов 20: ↑11 и ↓9 +2
Просмотры 268
Комментарии 11

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

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

0. Присказка


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

Улучшим регулярные выражения

Регулярные выражения *
После прочтения книги про регулярные выражения (далее просто РВ) у меня появились кое-какие мысли по поводу их читаемости. Когда РВ только появлялись, и в них было довольно мало условных обозначений вроде \d, \w и тому подобных, то, наверное, все было не так страшно, хотя уже тогда стоило задуматься о наглядности. Сейчас чтение кода с РВ — это тихий ужас. Нет, если РВ короткое, то особых проблем нет, но по мере их усложнения и появления различных скобок все становится просто кошмарно. Ситуация усугубляется тем, что в некоторых языках (не будем указывать пальцем) постоянно приходится удваивать слеши.

Кроме того в той нотации РВ, которая сейчас используется в большинстве языках программирования, в некоторых, казалось бы простых ситуациях, приходится выкручиваться с помощью различных финтов. Первый пример, что пришел в голову — составить регулярное выражение если «abc», то затем НЕ «xyz».

Читать дальше →
Всего голосов 22: ↑10 и ↓12 -2
Просмотры 4.1K
Комментарии 10

Осторожно! Регекспы!

Ненормальное программирование *
8341.jpg - image uploaded to PicamaticЧасто ли вы используете регулярные выражения? Задумываетесь ли вы о том, на сколько оправдано их использование? Каковы альтернативы, каковы возможности и ограничения? Какова цена применения регекспа?

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

Настоящей статьёй, я призываю одуматься задуматься.

Читать дальше →
Всего голосов 171: ↑158 и ↓13 +145
Просмотры 7.6K
Комментарии 86

8 полезных регэкспов с наглядным разбором

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

1. Часть ЧПУ (человекопонятный URL)


По сути, слово с дефисами.

Паттерн: /^[a-z0-9-]+$/
short_url

Примеры посерьёзнее
Всего голосов 176: ↑132 и ↓44 +88
Просмотры 259K
Комментарии 119

Общие советы по составлению оптимальных регулярных выражений

Чулан
Регулярные выражения — неотъемлемая часть любого инструмента обработки данных.
Логично, что в различных вариациях поддерживается различный синтаксис и различный функционал.
Не смотря на это принципы работы самих регулярных выражений, машины регулярных выражений и базовые установки оптимизации практически едины.
Где-то на просторах сети видел совершенно глупое заявление, что “регулярные выражения не приспособлены для решения нерегулярных данных” или нечто похожее. Полнейшая ерунда.
Читать дальше →
Всего голосов 29: ↑29 и ↓0 +29
Просмотры 686
Комментарии 26