木村です。

On Thu, 19 Jun 2008 15:09:42 +0900
"Hideo Konami" <konami / kyoto-wu.ac.jp> wrote:

> 小波です。
> 
> 正規表現について質問が出ているので便乗させてください。
> 
> キャメルケースの複合文字列,たとえば "DeepBlueEyes" 
> (複合している語は4つ以内,英字のみ)から
> ["Deep", "Blue", "Eyes"] のような配列を生成できない
> ものかと思って試しています。
> 
> /([A-Z][a-z]+)([A-Z][a-z]+)([A-Z][a-z]+)([A-Z][a-z]+)/
> でマッチさせて,[$1,$2,$3,$4] という配列から nil
> 捨てるという方法を考えたのですが,サイズに対してフレキ
> シブルではない(複合語数が増えたらめんどい)のでいまいち
> 気に入りません。うまい方法はないものでしょうか。

切り出す語が、大文字一文字 + 小文字の連続 に限定されるならこんなのとか。

"DeepBlueEyes".scan(/[A-Z][a-z]+/).each do |v|
  puts v
end

Deep
Blue
Eyes

頭字語のように大文字のみで構成される単語や iPod みたいなのも考えると
ちょっと悩ましいですが。

もうちょっと限定できる条件が得られればなんとかできるかもしれませんけど。


-- 
木村浩一