西山和広です。

>>> Thu, 27 Oct 2005 14:36:50 +0900 の刻に
>>> cxn03651 / msj.biglobe.ne.jp(中村 英夫) 氏曰く
>  全角スペースを区切り(ただし、括弧で囲まれたものは区切りと
> しない)として文字列の分解を行いたいのですが、次のように行う
> と"@"を含んだ文字列が切り出されてしまいます。
> 
> WindowsXPのコマンドプロンプトで
> >ruby -v
> ruby 1.8.2 (2005-02-01([i386-mswin32]
> >ruby -Ks -e "p 'あい(う え)お かき'.scan(/[^ (\(]*(?:[(\(][^)\)]*[)\)])*[^ (\(]*(?:[(\(][^)\)]*[)\)])*/)"
> ["あい(う え)お", "", "@かき",""]
> 
> VineLinux3.2にWinXP上のTeraTermProからログインして
> $ruby -v
> ruby 1.8.2 (2004-11-03) [i386-linux]
> $ruby -Ke -e "p 'あい(う え)お かき'.scan(/[^ (\(]*(?:[(\(][^)\)]*[)\)])*[^ (\(]*(?:[(\(][^)\)]*[)\)])*/)"
> ["あい(う え)お", "", ",・\255", ""]
> 
> ##上記中、半角2つ分のスペースに見える部分は、全角スペース
>   を入れてあります。
> 
>  これは(やはり)私のスクリプトが悪い所為でしょうか。

全角文字に「*」(0回以上の繰り返し)を付けると
マッチの開始位置がずれることがあるようです。


% cat test_ruby-list-41400.rb 
#!/usr/bin/ruby -Ke

require 'test/unit'

class KanjiCharStarMatchTest < Test::Unit::TestCase
  def test_not_char_star
    assert_equal(['', '', ''], 'aa'.scan(/[^a]*/))
    assert_equal(['', '', ''], 'ああ'.scan(/[^あ]*/))
  end

  def test_char_star
    assert_equal(['a', '', '', ''], 'abc'.scan(/a*/))
    assert_equal(['あ', '', '', ''], 'あいう'.scan(/あ*/))
  end
end
% ruby test_ruby-list-41400.rb 
Loaded suite test_ruby-list-41400
Started
FF
Finished in 0.041146 seconds.

  1) Failure:
test_char_star(KanjiCharStarMatchTest) [test_ruby-list-41400.rb:13]:
<["あ", "", "", ""]> expected but was
<["あ", "", "", "", "", ""]>.

  2) Failure:
test_not_char_star(KanjiCharStarMatchTest) [test_ruby-list-41400.rb:8]:
<["", "", ""]> expected but was
<["", "△\242", ""]>.

2 tests, 4 assertions, 2 failures, 0 errors
%


-- 
|ZnZ(ゼット エヌ ゼット)
|西山和広(Kazuhiro NISHIYAMA)