[#42454] 多量の正規表現との効率的なマッチのアイデアを、、 — しん <dezawa@...>

出沢です

22 messages 2006/06/22
[#42455] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — rubikitch <rubikitch@...> 2006/06/22

From: しん <dezawa@aliadne.net>

[#42456] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — しん <dezawa@...> 2006/06/23

出沢です

[#42458] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — rubikitch <rubikitch@...> 2006/06/23

From: しん <dezawa@aliadne.net>

[#42459] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — しん <dezawa@...> 2006/06/23

出沢です

[#42460] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — rubikitch <rubikitch@...> 2006/06/23

From: しん <dezawa@aliadne.net>

[#42461] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — しん <dezawa@...> 2006/06/23

出沢です。

[ruby-list:42443] 日本語でのString#casecmpの利用について

From: Eito Katagiri <eito@...>
Date: 2006-06-22 06:43:03 UTC
List: ruby-list #42443
片桐@ユービットと申します。


Shift_JISでエンコードされたひらがなや漢字を含む文字列に対して、
String#casecmpを使用するとどのような動作が期待できるのでしょうか?

ruby 1.8.1 (2003-12-25) [i686-linux]をRedHat Linux 9上で、

  $KCODE = "S"
  "\202\320".casecmp("\202\323")

を実行すると"0"が帰ってきます。"\202\320"と"\202\323"は、それぞれ、Shift_JIS
で、"ひ"と"ふ"になります。

"ひ"や"ふ"でそれぞれ、downcaseやupcaseメソッドを実行すると元の文字列と同じ文
字列が帰ってきます。

他のバージョンのrubyにおいても文字は違いますが、同様の現象を確認することがで
きました。(このメールの最後に自分が使用したコードがあります。)

ひらがなや漢字などが含む文字列に対しては、String#casecmpを使用してはいけない
のでしょうか?


以上、宜しくお願いします。


-----
片桐英人 <eito@ubit.com>


-----以下、テストコード-----
$KCODE = "S"

require "test/unit"

class TC_String < Test::Unit::TestCase
  def test_casecmd
    # Creates an array of all hiraganas
    hiragana = ["\202\240"] # Shift_JIS encoded hiragana 'a'
    81.times do
      hiragana << hiragana.last.succ
    end

    errors = []
    hiragana.each do |src|
      hiragana.each do |dst|
        if src == dst
          if src.casecmp(dst) != 0
            error = "\"#{src}\".casecmp(\"#{dst}\") should return 0."
            error << " (upcase: \"#{src.upcase}\", \"#{dst.upcase}\")"
            error << " (downcase: \"#{src.downcase}\", \"#{dst.downcase}\")"
            errors << error
          end
        else
          if src.casecmp(dst) == 0
            error = "\"#{src}\".casecmp(\"#{dst}\") should not return 0."
            error << " (upcase: \"#{src.upcase}\", \"#{dst.upcase}\")"
            error << " (downcase: \"#{src.downcase}\", \"#{dst.downcase}\")"
            errors << error
          end
        end
      end
    end
    assert(errors.empty?, errors.join("\n"))
  end
end




In This Thread

Prev Next