use strict; use warnings; use utf8; binmode STDOUT, ":utf8"; my $str = "あうえういあおういいういああ"; my $key = "ういあ"; my @chars = split("", $key); my $pat = join("(", @chars).(")?" x $#chars); while ($str =~ /($pat)/g) { print "$1\n"; }
% perl a.pl う ういあ うい ういあ
「普段はケチケチしてもいいけど、たまにはパッとした」という人もいるが、これはかなり危険な思想である。そうなんですよねえ。
たとえば、毎日100円節約して、たまにパッと5万円使った場合、次のようになる。
100円 x 365日 - 5万円 = -1万3500円残念ながら赤字である。こういう人は非常に赤字を出しやすい性質なので、経営者には向いていない。要は、節約した気になっているだけで会計を見ていないのである。(p.42)
use strict; use warnings; use SUFARY; my $wordset_fn = shift @ARGV; my $suf = SUFARY->new($wordset_fn); while (<>) { chomp; next if /^\s*$/; my @chars = split(//, $_); for (my $i = 0; $i < @chars; $i++) { my $longest; my $key; for (my $j = $i; $j < @chars; $j++) { $key .= $chars[$j]; my ($left, $right) = $suf->range_search($key); last if not defined $left and not defined $right; ($left, $right) = $suf->range_search($key."\n"); next if not defined $left and not defined $right; if ($right - $left == 0) { my $li = $suf->get_position($right); $longest = $suf->get_line($li); } } print $longest if defined $longest; } }
% cat a.txt pen th this lov love % mkary -q -l a.txt % echo 'this is a pen which I love' | ./lcps.pl a.txt this pen love