Skip to content

Instantly share code, notes, and snippets.

View klopp's full-sized avatar

Vsevolod Lutovinov klopp

  • Russia
  • 07:03 (UTC +03:00)
View GitHub Profile
@klopp
klopp / uri.cpp
Last active February 18, 2020 14:42
static const boost::regex::flag_type rx_flags =
boost::regex_constants::perl|
boost::regex_constants::icase|
boost::regex_constants::optimize|
boost::regex_constants::collate;
static boost::regex regex_tcp_v4("((([^:]+)?(:([^@]+))?@)?([^\\/\\?:]+)(:(\\d+))?)?(\\/([^\\?]+)?)?(\\?(.*))?$", rx_flags);
static boost::regex regex_tcp_v6("((([^:]+)?(:([^@]+))?@)?(\\[[:\\da-f]+\\])(:(\\d+))?)?(\\/([^\\?]+)?)?(\\?(.*))?$", rx_flags);
static boost::regex regex_unix("((([^:]+)?(:([^@]+))?@)?([^:?:]+)(:([^\\?]+))?)?(\\?(.*))?", rx_flags);
static boost::regex regex_query("([-\\w+%]+)=([^&;]*)", rx_flags);
static boost::regex regex_is_v6("\\[[\\:\\da-f]+\\]", rx_flags);
@klopp
klopp / remove-r.sh
Created November 24, 2019 13:04
Поиск и конвертирование файлов с виндовыми переводами строк
#!/bin/bash
SRC="."
for FILE in $(find "$SRC" -type f -regex ".*[.]\(p.\|[it]?html\|php\|cgi\|t\|js\|s?css\|feature\|sql\|yml\|json\|txt\)$")
do
R=$(grep $'\r' "$FILE")
if [ -n "$R" ]; then
echo "$FILE"
TEMPFILE=$(tempfile)
@klopp
klopp / anagrams.pl
Last active February 6, 2020 12:41
#!/usr/bin/perl
# --------------------------------------------------------------------------------
# Вход: массив слов
# Выход: отдельно сгруппировать слова, являющиеся анаграммами,
# отдельно - не являющиеся
# --------------------------------------------------------------------------------
use Modern::Perl;
use utf8;
use DDP;
package StrictRound;
# ------------------------------------------------------------------------------
# Обёртка для POSIX::round. Позволяет настраивать контроль входного параметра
# и реакцию на ошибки. Плюс обрабатывает ',' (или что ещё) как десятичную точку.
#
# Пример:
#
# use StrictRound qw/strict_round/, {
# allow_undef => 1, - разрешить undef и ''
@klopp
klopp / xml-libxml.pl
Last active February 29, 2020 18:35
Парсинг XML - I
#!/usr/bin/perl
# ------------------------------------------------------------------------------
# Напишите скрипт, получающий в качестве параметра путь к XML-файлу и выдающий
# на STDOUT следующее:
# * суммарное число букв внутри тегов, не включая пробельные символы
# (<aaa dd="ddd">text</aaa> - четыре буквы)
# * суммарное число букв нормализованного текста внутри тегов, включая пробелы
# * число внутренних ссылок (теги <a href="#id">)
# * число битых внутренних ссылок (ссылки на несуществующие ID элементов)
@klopp
klopp / xml-twig.pl
Last active March 1, 2020 04:57
Парсинг XML - II
#!/usr/bin/perl
# ------------------------------------------------------------------------------
# Напишите скрипт, получающий в качестве параметра путь к XML-файлу и выдающий
# на STDOUT следующее:
# * суммарное число букв внутри тегов, не включая пробельные символы
# (<aaa dd="ddd">text</aaa> - четыре буквы)
# * суммарное число букв нормализованного текста внутри тегов, включая пробелы
# * число внутренних ссылок (теги <a href="#id">)
# * число битых внутренних ссылок (ссылки на несуществующие ID элементов)
@klopp
klopp / xml-parser.pl
Last active March 1, 2020 04:57
Парсинг XML - |||
#!/usr/bin/perl
# ------------------------------------------------------------------------------
# Напишите скрипт, получающий в качестве параметра путь к XML-файлу и выдающий
# на STDOUT следующее:
# * суммарное число букв внутри тегов, не включая пробельные символы
# (<aaa dd="ddd">text</aaa> - четыре буквы)
# * суммарное число букв нормализованного текста внутри тегов, включая пробелы
# * число внутренних ссылок (теги <a href="#id">)
# * число битых внутренних ссылок (ссылки на несуществующие ID элементов)
@klopp
klopp / xml-parser-tag.pl
Last active March 1, 2020 22:35
Парсинг XML - IV
#!/usr/bin/perl
# ------------------------------------------------------------------------------
# Напишите скрипт, получающий в качестве параметра путь к XML-файлу и выдающий
# на STDOUT следующее:
# * суммарное число букв внутри тегов, не включая пробельные символы
# (<aaa dd="ddd">text</aaa> - четыре буквы)
# * суммарное число букв нормализованного текста внутри тегов, включая пробелы
# * число внутренних ссылок (теги <a href="#id">)
# * число битых внутренних ссылок (ссылки на несуществующие ID элементов)
@klopp
klopp / xml-fast.pl
Last active March 2, 2020 20:11
Парсинг XML - V
#!/usr/bin/perl
# ------------------------------------------------------------------------------
# Напишите скрипт, получающий в качестве параметра путь к XML-файлу и выдающий
# на STDOUT следующее:
# * суммарное число букв внутри тегов, не включая пробельные символы
# (<aaa dd="ddd">text</aaa> - четыре буквы)
# * суммарное число букв нормализованного текста внутри тегов, включая пробелы
# * число внутренних ссылок (теги <a href="#id">)
# * число битых внутренних ссылок (ссылки на несуществующие ID элементов)
@klopp
klopp / README-XML.txt
Last active October 8, 2020 18:51
Про парсеры XML
Поначалу захотелось Mojo::DOM. Когда-то использовал этот модуль в качестве замены HTML::DOM (он кошмарен),
и не разочаровался. Вменяемый набор методов, но... На XML от 100 Mb он так тормозил, что сразу отбросил.
OK, идём по классике: XML::LibXML. Из плюсов:
1) хороший комбайн с кучей возможностей (хотя, как и любое универсальное, для конкретных задач может быть громоздок)
2) вполне шустро
3) приятная мелочь: умеет обрабатывать NS в атрибутах (все следующие варианты - нет, и если мы не знаем заранее какие
NS могут встретиться, приходится заморачиваться отдельно; дальше отдельно про NS упоминать не буду)