Skip to content

Instantly share code, notes, and snippets.

@rinmu
Created June 20, 2017 12:46
Show Gist options
  • Select an option

  • Save rinmu/2a94cc7dc00144d6ea4b9d480adabf74 to your computer and use it in GitHub Desktop.

Select an option

Save rinmu/2a94cc7dc00144d6ea4b9d480adabf74 to your computer and use it in GitHub Desktop.
濁点(\u3099)と半濁点(\u309A)を別扱いしている文字を結合する
DAKUTEN = "\u3099".freeze
HANDAKUTEN = "\u309A".freeze
BIND_LIST = {
"か#{DAKUTEN}" => "が",
"き#{DAKUTEN}" => "ぎ",
"く#{DAKUTEN}" => "ぐ",
"け#{DAKUTEN}" => "げ",
"こ#{DAKUTEN}" => "ご",
"さ#{DAKUTEN}" => "ざ",
"し#{DAKUTEN}" => "じ",
"す#{DAKUTEN}" => "ず",
"せ#{DAKUTEN}" => "ぜ",
"そ#{DAKUTEN}" => "ぞ",
"た#{DAKUTEN}" => "だ",
"ち#{DAKUTEN}" => "ぢ",
"つ#{DAKUTEN}" => "づ",
"て#{DAKUTEN}" => "で",
"と#{DAKUTEN}" => "ど",
"は#{DAKUTEN}" => "ば",
"は#{HANDAKUTEN}" => "ぱ",
"ひ#{DAKUTEN}" => "び",
"ひ#{HANDAKUTEN}" => "ぴ",
"ふ#{DAKUTEN}" => "ぶ",
"ふ#{HANDAKUTEN}" => "ぷ",
"へ#{DAKUTEN}" => "べ",
"へ#{HANDAKUTEN}" => "ぺ",
"ほ#{DAKUTEN}" => "ぼ",
"ほ#{HANDAKUTEN}" => "ぽ",
"カ#{DAKUTEN}" => "ガ",
"キ#{DAKUTEN}" => "ギ",
"ク#{DAKUTEN}" => "グ",
"ケ#{DAKUTEN}" => "ゲ",
"コ#{DAKUTEN}" => "ゴ",
"サ#{DAKUTEN}" => "ザ",
"シ#{DAKUTEN}" => "ジ",
"ス#{DAKUTEN}" => "ズ",
"セ#{DAKUTEN}" => "ゼ",
"ソ#{DAKUTEN}" => "ゾ",
"タ#{DAKUTEN}" => "ダ",
"チ#{DAKUTEN}" => "ヂ",
"ツ#{DAKUTEN}" => "ヅ",
"テ#{DAKUTEN}" => "デ",
"ト#{DAKUTEN}" => "ド",
"ハ#{DAKUTEN}" => "バ",
"ハ#{HANDAKUTEN}" => "パ",
"ヒ#{DAKUTEN}" => "ビ",
"ヒ#{HANDAKUTEN}" => "ピ",
"フ#{DAKUTEN}" => "ブ",
"フ#{HANDAKUTEN}" => "プ",
"ヘ#{DAKUTEN}" => "ベ",
"ヘ#{HANDAKUTEN}" => "ペ",
"ホ#{DAKUTEN}" => "ボ",
"ホ#{HANDAKUTEN}" => "ポ"
}.freeze
def bind_dakuten(str)
result = str.dup
BIND_LIST.each do |k, v|
result.gsub!(k, v)
end
result
end
@INUZUKA-Katsu
Copy link

trを使うとこんなふうにできます。
def bind_dakuten(str)
str.gsub(/(.)(\u3099|\u309B)/){|w|
$1.tr('か-とは-ほカ-トハ-ホウ','が-どば-ぼガ-ドバ-ボヴ')
}.gsub(/(.)(\u309A|\u309C)/){|w|
$1.tr('は-ほハ-ホ','ぱ-ぽパ-ポ')
}
end

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment