�Ȥ����櫓�ǡ�Regexp::Assemble
�Τ��Ҳ�
�󡩥롼�ױ�����ȴ���ˤ��ơ����������Τ� Regexp::Assemble �ν��֤���ʤ��Ρ�
���Ǥ�Perl Hackers����ã�Υ⥸�塼��ȤʤäƤ��ޤ������ޤ��Τ�ʤ����⤤��ä���뤫���Τ�ʤ��Τǡ�
���򤹤�⥸�塼�뤫���Ȥ����С��ʲ��򸫤�а��������Ǥ��礦��
Regexp::Assemble - Assemble multiple Regular Expressions into a single RE - search.cpan.orguse 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
���Υ֥����˥����Ȥ���ˤ�����������ɬ�פǤ���
��������������
���ε����ˤϵ��ĥ桼�����������Ȥ��Ǥ��ޤ���