�Ȥ����櫓�ǡ�Regexp::Assemble�Τ��Ҳ�

asin:4873113148
PERL HACKS
(���ܸ���)
[�Ѹ���]
odz buffer - ���� Regexp::Assemble
�󡩥롼�ױ�����ȴ���ˤ��ơ����������Τ� Regexp::Assemble �ν��֤���ʤ��Ρ�

���Ǥ�Perl Hackers����ã�Υ⥸�塼��ȤʤäƤ��ޤ������ޤ��Τ�ʤ����⤤��ä���뤫���Τ�ʤ��Τǡ�

���򤹤�⥸�塼�뤫���Ȥ����С��ʲ��򸫤�а��������Ǥ��礦��

Regexp::Assemble - Assemble multiple Regular Expressions into a single RE - search.cpan.org
  use Regexp::Assemble;
  
  my $ra = Regexp::Assemble->new;
  $ra->add( 'ab+c' );
  $ra->add( 'ab+-' );
  $ra->add( 'a\w\d+' );
  $ra->add( 'a\d+' );
  print $ra->re; # prints a(?:\w?\d+|b+[-c])

�פϡ�qr/(?:ab+c|ab+-|a\w\d+|a\d+)/�Ƚ񤯤��⡢qr/(?:\w?\d+|b+[-c])/�Ƚ񤤤�������®������ɽ���ˤʤ�Τǡ������ư�����褦�Ȥ�����ΤǤ���

�㤨�С�0����255�ޤǸ�̩�˥ޥå���������ɽ���Ȥ����Τϡ�trivial��qr/(?:0|1|2|..|255)/�Ƚ񤤤Ƥ�����ΤǤ����������������®�ʤ櫓�Ǥ���������®�����뤿��ˤϡ����ޤ��ե��������Ȥˤ��ä������ꤷ�����ۤ�����ɽ�������ɤ����Ƥ����ΤǤ��������ξ����˰��Ф��ꤸ���Τ�Regex::PreSuf�Ǥ�����Perl 5.8��ȯ��pumpking���ä�jhi����ä����Υ⥸�塼��϶��̤�prefix��suffix��ޤȤ᤿Regexp���뤳�Ȥ����褿�ΤǤ������������ޤ����κ��Ϥޤ�Proof of Concept���٤Ǥ�����

���μ���ɽ�줿�Τ���Regexp::Optimizer����Ԥϼ¤ϻ䡣����Ϥ��ʤ��������ͤ��ƺ�ä��⥸�塼��ǡ����ʤ����ȿ������ޤ����������Ȥ��ȡ�/usr/bin/dict/words��exact match��������ɽ���Ǥ���������褿�ꡢ������ñ��ʸ����ǤϤʤ�����ɽ����������ɽ����ƹ������뤳�Ȥ����褿�ΤǤ���

�ȤϤ�����ΤΡ����Υ⥸�塼���Regex::PreSuf��Ʊ������������Ƥ��ޤ�����®�٤Ǥ������Υ⥸�塼���Regex::PreSuf��Ʊ������prefix�����ǤϤʤ�suffix��ޤȤ�ޤ����������¤ΤȤ�����TRIE����ˤ�prefix�����ޤȤ��Ф褯��ɽ����û���ʤ��Τ�suffix��ޤȤ�ʤ��Ƥ�match�ι�®����»�ʤ��ʤ��ΤǤ���������TRIE��������ʤ顢����®�ʥ��르�ꥺ�ब�Ȥ��ޤ���

������ä��Τ����ޤ���Regexp::Assemble�Ǥ�����Ԥ����ƥʥ󥹤�Ǯ���ǡ����ޤ��ޤʵ�ǽ���ɲä��Ƥ������⤢�äơ����ǤϤ��줬�ȳ�ɸ��ˤʤäƤ��ޤ�����⺣�ǤϤ�����Υ桼�����Ǥ�;-)��������ñ��ʸ���󤫤�����ɽ������Ȥ���®�٤����������ä��Τǡ�404 Blog Not Found:TRIE-Optimized Regexp�򸵤ˤ��Υ�����������®������Regexp::Trie���꡼�����Ƥ��ޤ�����

��ۤɤ�0����255�ޤǤο����˸�̩�˥ޥå���������ɽ���ϡ����ǤϤ���ۤɼ�ڤ˼������ޤ���

% perl -MRegexp::Assemble \
    -le '$r=Regexp::Assemble->new; $r->add(0..255); print $r->re'
(?-xism:(?:1(?:0\d?|1\d?|2\d?|3\d?|4\d?|5\d?|6\d?|7\d?|8\d?|9\d?)?|2(?:[6789]|5[012345]?|0\d?|1\d?|2\d?|3\d?|4\d?)?|3\d?|4\d?|5\d?|6\d?|7\d?|8\d?|9\d?|0))

�����Perl 5.9�ˤϡ�Perl���Ȥ������Ʊ���Τ��Ȥ��뵡ǽ���Ȥ߹��ޤ�ޤ�����������������Regexp::Assemble�ε�ǽ�ϡ�ñ��TRIE Optimize�����α�ޤ�ޤ��󡣤��γʹ����㤬��odz�������Ǥ����ʲ�������Τ��ᾯ����ľ���ƥ����ȤDz��⡣

use Regexp::Assemble;

my %analyze = (
    qr/Pattern 1/ => 'Pattern 1',
    qr/Pattern 2/ => 'Pattern 2',
    qr/Pattern 3/ => 'Pattern 3',
    # ...
);
my $re = Regexp::Assemble->new; 
$re->track;              # ->track �ǡ���� ->match ������ɽ������Ф���褦������
$re->add(keys %analyze); # ����ɽ�����ɲ�
while (my $log = $logs->readline) {
    next unless $log->{ua} 
    my $matched = $re->match($log->{ua})); # $matched �ˤϡ�match�η�̤ǤϤʤ�
    next unless defined $mached;           # match ��������ɽ�������롣
    my $pattern = $analyze{$matched};
    # do something for pattern
}

���������Ȥ����������Τǡ���Ϥ�Regexp::Assemble��ñ�ʤ�����ɽ����®���⥸�塼��ΰ��Ķ���Ƥ��ޤ����ʤ���������ˡ��HACK #98�Ȥ���PERL HACKS�ˤ��о줷�Ƥ��ޤ���

Regexp::Assemble�⤽���Ǥ����������ǾҲ𤷤�����ɽ����Ϣ�ġ���ϡ��������Perl��Ȥ�ʤ��ͤˤ��������פ�����ޤ����ʤˤ���Regexp::Assemble��������������ɽ���ϡ�PCRE�ߴ��ʤΤǡ�Ruby��Python��Java�ʤɤǤ�ư���������ԤǤ��뤫��Ǥ���

����ɽ���������˻ȤäƤ���ͤ��������˻ȤäƤ���ͤ⡢Regexp::Assemble��˺��ʤ���

Dan the Yet Another Regexp Hacker