いや、楽しいね!コーディング!(期限がなければ)
人様が作ったシステム(MTOS)上のプラグインを作っていますが、
人様が作ったので当然よくわからない部分がある。
ぐーぐる先生で先駆者の役立ちそうなよさげデータを
うまく拾えなかったりするもので、
やりたいことがうまくできない(半分以上私のスキル不足だ)けど、
この駄々っ子ぶりがいいよね!(仕事じゃなければ)
# まぁソース嫁ってのは当然なんですが、
# そこまでコストかけたくないので、うまくできないかなぁ
# 思うんですがなかなかうまくまとまってくれていませんね。
# 今のところうまいこと動いてるのでまぁいいか的な流れですが(笑)
というわけで、Perlでモガモガやっているんですが、
マッチングのところで、ちょっと悩んでいるというか、
世の中のPerl使いはどうやってんだろうって気になることがあったりします。
マッチング?な話なんですが、具体例で話すと、
あるテキストデータの、配列に格納されたキーワード群へのマッチング
という場合の処理って皆さんどうやってるのかなぁ。
実際にソースで考えると次のような感じ。
my @keyItem = ("Mon", "Tue", "Wed", "Thu", "Fri");
my $str = "私はThuに東京さいくだ。\n";
foreach (@keyItem) {
# 条件にマッチングしている
if ( $str =~ /$_/ ) {
# 処理ざます
last; # 抜け出すザマス
}
}
ってな具合に考えた。
ちなみに、
$str =~ /Mon|Tue|Wed|Thu|Fri/
で考えればよいって話もあるけど、
それだと@keyItemの中身が変化しちゃうと対応できないので、
狙いからそれちゃう。
こういうケースって結構あると思うんだけど、
みんなどうやって処理してるんだろう?
もっと美しいっ方法ってのがありそうだけど。
>それだと@keyItemの中身が変化しちゃうと対応できないので、狙いからそれちゃう。
返信削除うーん。こういう風ではいかんの?
sub build_regex {
#実際は要エスケープ
join("|",@_);
}
my $re = build_regex(@keyItem);
print $re;
if ($str =~ /${re}/) {
print "hogehoge\n";
}
foreachだと毎度正規表現コンパイルしそうだしね。
#そうか、Perlには正規表現オブジェクトみたいなのはないのね。
OH!!!
返信削除joinの存在ワスレテタヨ。
一応、配列の中身をくっつけて正規表現をつくるってのは考えてたけど、
# でもjoinは思い浮かばず(日ごろつかってないのばれてますね)
それとfor/foreach文でまわしちゃうのと
・どっちがコスト安いのかな?
・どっちが可読性高いかな
ってこと考えてたらアレしてしまった、。
まぁそこまで深刻じゃないのでとりあえず動けばいいってのが
もっともなのかもしれないけど。