Perl アポストロフィを含む文字列変換 | でばぐめ -IT技術メモ-

でばぐめ -IT技術メモ-

主にハードウェア/ソフトウェアのプログラミングに関するブログです。

前回の大文字と小文字の置換方法 だと、アポストロフィ( ' )を含む文字列では、

うまく置換されません。

$_ = "don't do it";
s/\b(\w+)/\u\L$1/g;   # $_は"Don'T Do It"になる


「ワード」とは、英文字、数字、下線を並べたもので、アポストロフィは含みません。

そのため、ワード境界アンカー\b はアポストロフィ前後を境界とみなしてしまいます。


\b によるワード境界マッチ
don ' t do it
↑ ↑ ↑ ↑↑ ↑↑ ↑



perlfaq4で下のような解決方法が提案されています。


■ 先頭のワードとスペース後のワードにマッチさせ、置換する

s/((^\w)|(\s\w))/\U$1/g;

■ ワードとアポストロフィを含む文字列にマッチさせ、置換する

s/([\w']+)/\u\L$1/g;


初めてのPerl 第5版/Randal L. Schwartz

¥3,780
Amazon.co.jp

初心者にもわかりやすく書かれていますが、
全くの初心者というより、少しPerlに慣れてきた時に威力を発揮する本です。
簡単なテキスト操作のためにPerlを使用するのであれば十分事足ると思います。


プログラミングPerl〈VOLUME1〉/ラリー ウォール
¥5,565
Amazon.co.jp

ページ数も多く、価格もそれなりなので、Perlについて詳しく知りたい人向けです。
"初めてのPerl"と重複する箇所も多々あるので、これからがっちりPerlを身につけたい人は
こちらをおすすめします。