日本語の文字種判定、文字種変換(半角→全角、ひらがな→カタカナなど)を行います。
以下のコマンドを実行してください。
$ sudo gem install moji
Ruby 1.8: $KCODE
を指定してから require "moji"
してください。
Moji モジュールの関数に渡す文字列の文字コードは $KCODE
と一致させてください。
Ruby 1.9: どの文字コードの文字列を渡しても大丈夫ですが、 String#encoding が正しく設定されている 必要があります。正規表現を返す関数( Moji.kata など)は Encoding.default_internal (設定されてない場合はUTF-8)用の正規表現を返します。その他のエンコーディング用の正規表現は Moji.kata(Encoding::SJIS) などで取得できます。
$KCODE= "UTF8" # Ruby 1.9では不要 require "moji" #文字種判定。 p Moji.type("漢") # => Moji::ZEN_KANJI p Moji.type?("A", Moji::ZEN) # => true #文字種変換。 p Moji.zen_to_han("Ruby") # => "Ruby" p Moji.upcase("Ruby") # => "RUBY" p Moji.kata_to_hira("ルビー") # => "るびー" #文字種による正規表現。 p /#{Moji.kata}+#{Moji.hira}+/ =~ "ぼくドラえもん" # => 6 p Regexp.last_match.to_s # => "ドラえもん"
以下の定数は、文字種の一番細かい分類です。
Moji.type
が返すのは、以下の定数のうちの1つです。
HAN_CONTROL
HAN_ASYMBOL
HAN_JSYMBOL
HAN_NUMBER
HAN_UPPER
HAN_LOWER
HAN_KATA
ZEN_ASYMBOL
ZEN_JSYMBOL
ZEN_NUMBER
ZEN_UPPER
ZEN_LOWER
ZEN_HIRA
ZEN_KATA
ZEN_GREEK
ZEN_CYRILLIC
ZEN_LINE
ZEN_KANJI
以下の定数は、上の文字種の組み合わせと別名です。
HAN_SYMBOL
HAN_ASYMBOL | HAN_JSYMBOL
HAN_ALPHA
HAN_UPPER | HAN_LOWER
HAN_ALNUM
HAN_ALPHA | HAN_NUMBER
HAN
HAN_CONTROL | HAN_SYMBOL | HAN_ALNUM | HAN_KATA
ZEN_SYMBOL
ZEN_ASYMBOL | ZEN_JSYMBOL
ZEN_ALPHA
ZEN_UPPER | ZEN_LOWER
ZEN_ALNUM
ZEN_ALPHA | ZEN_NUMBER
ZEN_KANA
ZEN_KATA | ZEN_HIRA
ZEN
ZEN_SYMBOL | ZEN_ALNUM | ZEN_KANA | ZEN_GREEK | ZEN_CYRILLIC | ZEN_LINE | ZEN_KANJI
ASYMBOL
HAN_ASYMBOL | ZEN_ASYMBOL
JSYMBOL
ASYMBOL
には含まれない全角/半角記号。HAN_JSYMBOL | ZEN_JSYMBOL
SYMBOL
HAN_SYMBOL | ZEN_SYMBOL
NUMBER
HAN_NUMBER | ZEN_NUMBER
UPPER
HAN_UPPER | ZEN_UPPER
LOWER
HAN_LOWER | ZEN_LOWER
ALPHA
HAN_ALPHA | ZEN_ALPHA
ALNUM
HAN_ALNUM | ZEN_ALNUM
HIRA
ZEN_HIRA
の別名。KATA
HAN_KATA | ZEN_KATA
KANA
KATA | ZEN_HIRA
GREEK
ZEN_GREEK
の別名。CYRILLIC
ZEN_CYRILLIC
の別名。LINE
ZEN_LINE
の別名。KANJI
ZEN_KANJI
の別名。ALL
Moji.type(ch)
文字 ch の文字種を返します。
「一番細かい分類」の定数のうち1つを返します。
上の分類に当てはまらない文字(Unicodeのハングルなど)に対しては nil
を返します。
また、UnicodeのB面以降の文字に対しても nil
を返します。
文字が割り当てられていない文字コードに対する結果は不定です( nil
を返す事もあります)。
p Moji.type("漢") # => Moji::ZEN_KANJI
Moji.type?(ch, type)
文字 ch が文字種 type に含まれれば、 true
を返します。
type には全ての定数と、それらを |
で結んだものを使えます。
p Moji.type?("A", Moji::ZEN) # => true
Moji.regexp(type[, encoding])
文字種 type の1文字を表す正規表現を返します。
type には全ての定数と、それらを |
で結んだものを使えます。
Ruby 1.9では encoding に Encoding オブジェクトを渡すと、指定のエンコーディング用の 正規表現を返します。 省略すると Encoding.default_internal (指定されてない場合は Encoding::UTF_8 )とみなします。
p Moji.regexp(Moji::HIRA) # => /[ぁ-ん]/
Moji.zen_to_han(str[, type])
文字列 str の全角を半角に変換して返します。
type には、変換対象とする文字種を定数で指定します。
デフォルトは ALL
(全て)です。
p Moji.zen_to_han("Ruby!?") # => "Ruby!?" p Moji.zen_to_han("Ruby!?", Moji::ALPHA) # => "Ruby!?"
Moji.han_to_zen(str[, type])
文字列 str の半角を全角に変換して返します。
type には、変換対象とする文字種を定数で指定します。
デフォルトは ALL
(全て)です。
p Moji.han_to_zen("Ruby!?") # => "Ruby!?" p Moji.han_to_zen("Ruby!?", Moji::SYMBOL) # => "Ruby!?"
Moji.normalize_zen_han(str)
文字列 str の大文字、小文字を一般的なものに統一します。
具体的には、ASCIIに含まれる記号と英数字( ALNUM|ASYMBOL
)を半角に、それ以外の記号とカタカナ( JSYMBOL|HAN_KATA
)を全角に変換します。
Moji.upcase(str[, type])
文字列 str の小文字を大文字に変換して返します。
type には、変換対象とする文字種を定数で指定します。
デフォルトは LOWER
(全角/半角のアルファベット)です。
ギリシャ文字、キリル文字には対応していません。
p Moji.upcase("Ruby") # => "RUBY"
Moji.downcase(str[, type])
文字列 str の小文字を大文字に変換して返します。
type には、変換対象とする文字種を定数で指定します。
デフォルトは UPPER
(全角/半角のアルファベット)です。
ギリシャ文字、キリル文字には対応していません。
p Moji.downcase("Ruby") # => "ruby"
Moji.kata_to_hira(str)
文字列 str の全角カタカナをひらがなに変換して返します。
半角カタカナは直接変換できません。 han_to_zen
で全角にしてから変換してください。
p Moji.kata_to_hira("ルビー") # => "るびー"
Moji.hira_to_kata(str)
文字列 str のひらがなを全角カタカナに変換して返します。
p Moji.hira_to_kata("るびー") # => "ルビー"
Moji.han_control([encoding])
Moji.han_asymbol([encoding])
...
Moji.kana([encoding])
...
定数それぞれに対応するメソッドが有り、 それぞれの文字種の1文字を表す正規表現を返します。
例えば、 Moji.kana
は Moji.regexp(Moji::KANA)
と同じです。
Ruby 1.9では encoding に Encoding オブジェクトを渡すと、指定のエンコーディング用の 正規表現を返します。 省略すると Encoding.default_internal (指定されてない場合は Encoding::UTF_8 )とみなします。
以下の例のように、文字クラスっぽく使えます。
p /#{Moji.kata}+#{Moji.hira}+/ =~ "ぼくドラえもん" # => 6 p Regexp.last_match.to_s # => "ドラえもん"
たぶんRuby 1.8以降。
Linux Ruby 1.8.7, 1.9.2にて動作確認しました。
Gimite 市川 (連絡先: <URL:http://gimite.ddo.jp/bbs/tnote.cgi> )
Public Domainです。煮るなり焼くなりご自由に。
<URL:http://github.com/gimite/moji>
2010/9/19 Ver.1.5
2008/8/30 Ver.1.4
2006/7/23 Ver.1.3
2006/10/5 Ver.1.2
ALL
)に。2005/1/3 Ver.1.1
$KCODE
が指定されていないとEUCUtil.typeが正常動作しない問題を修正。ASYMBOL
と JSYMBOL
を追加。2004/11/16 Ver.1.0