鬼車の文字列集合オプションはascii、unicodeとマッチパターンを切り替えできます。
これを活かすと、alnumが日本語を拾うという、怪挙動を抑制する事ができます
実際のところ
まず何もしない場合。almum……つまり0-9a-zA-Zだけにマッチすべきところ、
漢字も拾ってしまっています
"漢字".match(/[[:alnum:]]+/)' #<MatchData "漢字">
ここで文字列集合オプション。
正規表現パターン全体を囲って記述する点に注意
まずascii
p "漢字".match(/(?a:[[:alnum:]]+)/)' # nil
次にunicode
p "漢字".match(/(?u:[[:alnum:]]+)/)' # nil
デフォルトの挙動を使いたい場合はd
p "漢字".match(/(?d:[[:alnum:]]+)/)' #<MatchData "漢字">
詳しい話
鬼車の公式docによると
各オプションの挙動は以下の通り
文字集合オプション (文字範囲オプション) d: デフォルト (Ruby 1.9.3 互換) \w, \d, \s は、非ASCII文字にマッチしない。 \b, \B, POSIXブラケットは、各エンコーディングの ルールに従う。 a: ASCII ONIG_OPTION_ASCII_RANGEオプションがオンになる。 \w, \d, \s, POSIXブラケットは、非ASCII文字に マッチしない。 \b, \B は、ASCIIのルールに従う。 u: Unicode ONIG_OPTION_ASCII_RANGEオプションがオフになる。 \w (\W), \d (\D), \s (\S), \b (\B), POSIXブラケット は、各エンコーディングのルールに従う。