ocehb: (Default)
2015-05-08 02:50 pm
Entry tags:

Цепочки regexов


sub ipv6squeeze ($) { $_[0] =~ s#(^|:)0+#$1#gr =~ s#:::+#::#gr }

пример )
ocehb: (Default)
2012-01-20 08:21 am
Entry tags:

Look-Around Assertions в операторе s///

До сих пор не задумывался на эту тему, но работает. Пример:
Задание: Удалить все знаки «+», за которыми следует цифра.

# perl -le '$ARGV[0] =~ s#\+(?=\d)##g && print $ARGV[0]' "+test + +12 +13 ++"
+test + 12 13 ++
#

ocehb: (Default)
2011-03-15 01:58 pm
Entry tags:

сравнение скорости регулярного выражения и поиска в хеше

используем конструкцию (??{ code }); perldoc perlre

под кат )

резюме: на больших массивах имеет смысл использовать поиск через хеш.

update: при модификаторе /о регулярное выражение выигрывает у хеша, но до определенного размера.

Size: 16384
Benchmark: timing 1000000 iterations of A, B...
         A:  5 wallclock secs ( 4.58 usr + -0.01 sys =  4.57 CPU) @ 218818.38/s (n=1000000)
         B:  0 wallclock secs ( 0.90 usr +  0.02 sys =  0.92 CPU) @ 1086956.52/s (n=1000000)
Size: 32768
Benchmark: timing 1000000 iterations of A, B...
         A:  5 wallclock secs ( 4.55 usr +  0.00 sys =  4.55 CPU) @ 219780.22/s (n=1000000)
         B: 239 wallclock secs (237.26 usr +  0.37 sys = 237.63 CPU) @ 4208.22/s (n=1000000)
ocehb: (Default)
2010-08-17 01:10 am
Entry tags:

разбор заголовка e-mail


my @head = split "(?ms)\r?\n(?!\\s)",do { local $/ = ""; <STDIN> };


в @head — строки из заголовка письма, со всеми переносами.
тело письма дальше в stdin, можно читать и построчно.
ocehb: (Default)
2009-05-13 10:55 pm
Entry tags:

Работа с именованными группами в регулярных выражениях perl.

синтаксис: (?<name>выражение), обратная ссылка \k<name>, ссылка в коде $+{name}.

Пример разбора access_log )
ocehb: (Default)
2006-03-22 09:25 pm
Entry tags:

rfc 822 mail address parser

# perl -MEmail::Valid -MGraphViz::Regex -e \
'GraphViz::Regex->new ($Email::Valid::RFC822PAT)->as_png ($ARGV[0]);' /tmp/rfc822pat.png

(большое, ~1M)