Unicodeプロパティによる文字クラスがどうマッチするか、Ruby 2.3.1でやってみた。

コード

input_str.scan(regexp).join

結果

対象 \X (?>\p{Hiragana}\p{M}*) (?>\p{Katakana}\p{M}*) \p{In_Hiragana} \p{In_Katakana}
が (\u304c)ががが
か+合成濁点 (\u304b\u3099)ががが
か+単独濁点 (\u304b\u309b)か゛かか゛
濁点付きの"う" (\u3094)ゔゔゔ
う+合成濁点 (\u3046\u3099)ゔゔゔ
う+単独濁点 (\u3046\u309b)う゛うう゛
濁点付きの"ウ" (\u30f4)ヴヴヴ
ウ+合成濁点 (\u30a6\u3099)ヴヴ゙ウ
ウ+合成濁点 (\u30a6\u309b)ウ゛ウ゛ウ
長音記号 (\u30fc)ーー
中黒 (\u30fb)・・
平仮名繰返し (\u309d\u309e)ゝゞゝゞゝゞ
片仮名繰返し (\u30fd\u30fe)ヽヾヽヾヽヾ
全角"!" (\uff01)!
全角"(" (\uff08)(
全角"0" (\uff10)0
全角"@" (\uff20)@
全角"A" (\uff21)A
全角"\" (\uff3c)\
全角"~" (\uff5e)~
半角中黒 (\uff65)・
半角長音記号 (\uff70)ー
半角"カ" (\uff76)カカ
半角"カ"+半角濁点 (\uff76\uff9e)ガカ

参考