456 にマッチする正規表現を見つけろ
文字列 456 にマッチする正規表現のうち、Regexp::Assemble を使ってどれがいちばん早くマッチするか。
use strict; use warnings; use Regexp::Assemble; my $ra = Regexp::Assemble->new->track; #$ra->debug(0xf); $ra->add(map {"($_)"} qw{456 \d{3} .* .+ \w{2,5} \d\w\S \d\d\d} ); #print $ra->dump, "\n"; print "$ra\n"; $ra->match('456') and print $ra->matched, '=>', join('/', $ra->capture), "\n";
$ perl g.pl Possible attempt to separate words with commas at g.pl line 7. (?-xism:(?:(\w{2,5})(?{$self->{m}=5})|(\d\d\d)(?{$self->{m}=6})|(\d\w\S)(?{$self->{m}=4})|(\d{3})(?{$self->{m}=1})|(456)(?{$self->{m}=3})|(.*)(?{$self->{m}=0})|(.+)(?{$self->{m}=2}))) (\w{2,5})=>456
さあ (w{2,5}) を破る正規表現は現れるのか。
Regexp::Assemble のソースを読んで _insert_path メソッドまで追ったけれど、なぜ w({2,5}) が先頭に来るのかは解読できず。