重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

正規表現で、eオプションを使ったとき、
1度の解析で、aはAに、bはBに変換したい場合、

$_ = "axzzzbyzzc";
s/(a|b)/ ($1 eq "a") ? "A" : "B" /eg;

というのは動作したのですが、

aはA、bはB、cはCと変換したい場合、
$_ = "axzzzbyzzc";
s/(a|b|c)/…/eg;

…の部分はどうやって記述すればいいのでしょうか

A 回答 (2件)

半角アルファベットの小文字を大文字にしたいというのであれば、



置き換えを使って
$hoge =~ tr/a-z/A-Z/;
または
$hoge = uc($hoge);

a~cまでというなら
$hoge =~ tr/a-c/A-C/;
または
$hoge =~ tr/abc/ABC/;

というのが一般的な方法です。
どうしても
s/~/~/;
を使いたいなら

$hoge =~ s/(a|b|c)/uc($1)/eg;
または
$hoge =~ s/(\w)/uc($1)/eg;
    • good
    • 0
この回答へのお礼

参考になりました。
ucなんてものもあるんですね…
どうもありがとうございました。

お礼日時:2004/10/26 17:50

trってのがあるよ。



参考URL:http://www.rfs.jp/sitebuilder/perl/05/func/tr.html
    • good
    • 0
この回答へのお礼

簡略化して質問したので、実際はaをAに変えるという単純な置換ではないんです^^; eオプションをつかったときの if elseの使い方を知りたかったのですが、自己解決致しました。

…の部分を
if($1 eq "a"){"A"}
elsif($1 eq "b"){"B"}
elsif($1 eq "c"){"C"}

としたらできました。

でもtrの使い道をよくしらなかったので、大変参考になりました。ありがとうございます。

お礼日時:2004/10/26 17:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!