読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

正規表現"\w"は、$KCODEが設定されていれば日本語にマッチする。

JavaScriptの 正規表現"\w"は日本語にマッチしないわけですが、Rubyではマッチしたはず、と思って確認。

str = ""
puts str =~ //
puts str =~ //
puts str =~ /./
puts str =~ /\w/

実行結果です。

0
0
0
nil

あれ?

マニュアルをよく見ると「多バイト文字に対応した正規表現では」との条件がついていました。

Ruby リファレンスマニュアル - 正規表現

「多バイト文字に対応した正規表現」についても↑のページの上のほうに解説があって、

「多バイト文字に対応した正規表現」とは、 $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