• ベストアンサー

正規表現

正規表現で、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; …の部分はどうやって記述すればいいのでしょうか

質問者が選んだベストアンサー

  • ベストアンサー
  • Ethersky
  • ベストアンサー率71% (168/235)
回答No.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;

arcsin
質問者

お礼

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

その他の回答 (1)

回答No.1

trってのがあるよ。

参考URL:
http://www.rfs.jp/sitebuilder/perl/05/func/tr.html
arcsin
質問者

お礼

簡略化して質問したので、実際はaをAに変えるという単純な置換ではないんです^^; eオプションをつかったときの if elseの使い方を知りたかったのですが、自己解決致しました。 …の部分を if($1 eq "a"){"A"} elsif($1 eq "b"){"B"} elsif($1 eq "c"){"C"} としたらできました。 でもtrの使い道をよくしらなかったので、大変参考になりました。ありがとうございます。

関連するQ&A