[migemo] 文字クラス内での [ や ] のエスケープ処理について

Morita Sho morita-pub-ja @ inz.sakura.ne.jp
2008年 6月 1日 (日) 18:50:59 JST


はじめまして。森田と申します。

Ruby/Migemo を使用したツールを作っていたところ、Ruby が警告を表示するような正規
表現パターンが生成されるケースがありましたので、報告いたします。


例えば、このようなスクリプトを書いて実行すると

$ cat test.rb
$KCODE="e"
require 'migemo'

dict = MigemoStaticDict.new("/usr/share/migemo/migemo-dict")

migemo = Migemo.new(dict, "[")
migemo.optimization = 3
migemo.type = "ruby"
re = migemo.regex
puts re
Regexp.new( re )

$ ruby test.rb
[[[]
test.rb:11: warning: character class has `[' without escape

というように、警告が表示されます。

"[" という文字列を渡すと、
[[[]
というパターンが生成されるのですが、ruby 1.8 からは文字クラスの中でエスケープし
ない [ や ] がある場合、警告が表示されるようです。

正規表現 - Rubyリファレンスマニュアル
http://www.ruby-lang.org/ja/man/html/_C0B5B5ACC9BDB8BD.html#footnote-3
> ruby 1.8 feature このような "]" は、バックスラッシュエスケープを行うことが推奨
されます。ruby 1.8 では、エスケープしない "[" や "]" に対して警告が出るようにな
りました。


現在のところ警告だけで実害はないようですが、毎度警告が表示されてしまいますので、
文字クラス内の [ と ] をエスケープするようにしたパッチを作成してみました。
お手数とは思うのですが、確認していただければ幸いです。

以上です。失礼しました。

-- 
Morita Sho <morita-pub-ja @ inz.sakura.ne.jp>
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: migemo-regex-add-escaping-for-brackets.patch
型:         text/x-diff
サイズ:     564 バイト
説明:       無し
URL:        http://www.namazu.org/pipermail/migemo/attachments/20080601/25afc6eb/attachment.patch 


Migemo メーリングリストの案内