正規表現"\w"は、$KCODEが設定されていれば日本語にマッチする。
JavaScriptの 正規表現"\w"は日本語にマッチしないわけですが、Rubyではマッチしたはず、と思って確認。
str = "あ" puts str =~ /あ/ puts str =~ /あ/ puts str =~ /./ puts str =~ /\w/
実行結果です。
0 0 0 nil
あれ?
マニュアルをよく見ると「多バイト文字に対応した正規表現では」との条件がついていました。
「多バイト文字に対応した正規表現」についても↑のページの上のほうに解説があって、
「多バイト文字に対応した正規表現」とは、 $KCODE が設定されているか、あるいは明示的に漢字オプション(正規表現リテラルを参照)を指定するなどにより多バイト文字にマッチし得る正規表現を指します。
とのこと。$KCODEを設定するか、コンストラクタ引数で明示すればOKらしい。ふむ。
# $KCODEの初期値を確認 puts $KCODE # → NONE puts "---" # コンストラクタで明示してみる puts "あ" =~ Regexp.new( '\w', nil, "UTF8") puts "あ" =~ Regexp.new( '\w') # 明示しない場合はマッチしない。 puts "---" # UTF-8に設定 $KCODE = "UTF8" str = "あ" puts str =~ /あ/ puts str =~ /あ/ puts str =~ /./ puts str =~ /\w/
実行結果です。マッチするようになっていますね。
NONE --- 0 nil --- 0 0 0 0