From morita-pub-ja @ inz.sakura.ne.jp Sun Jun 1 18:50:59 2008 From: morita-pub-ja @ inz.sakura.ne.jp (Morita Sho) Date: Sun, 01 Jun 2008 18:50:59 +0900 Subject: [migemo] =?iso-2022-jp?b?GyRCSjg7eiUvJWklOUZiJEckThsoQiBbIA==?= =?iso-2022-jp?b?GyRCJGQbKEIgXSAbJEIkTiUoJTklMSE8JVc9aE19JEskRCQkJEYbKEI=?= Message-ID: <48427103.30600@inz.sakura.ne.jp> はじめまして。森田と申します。 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 -------------- 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 From zn @ mbf.nifty.com Mon Jun 2 21:11:09 2008 From: zn @ mbf.nifty.com (Kazuhiro NISHIYAMA) Date: Mon, 02 Jun 2008 21:11:09 +0900 Subject: [migemo] =?iso-2022-jp?b?GyRCSjg7eiUvJWklOUZiJEckThsoQiBbIA==?= =?iso-2022-jp?b?GyRCJGQbKEIgXSAbJEIkTiUoJTklMSE8JVc9aE19JEskRCQkJEYbKEI=?= In-Reply-To: <48427103.30600@inz.sakura.ne.jp> References: <48427103.30600@inz.sakura.ne.jp> Message-ID: <8563ssf34y.wl%zn@mbf.nifty.com> 西山和広です。 At Sun, 01 Jun 2008 18:50:59 +0900, Morita Sho wrote: > > + string.gsub(/\\/, '\\\\\\').gsub(/\]/, '\\]').gsub(/\[/, '\\[') 3回もgsubしなくても、 string.gsub(/[\\\[\]]/, '\\\\\&') のようにまとめて1回で置き換えてしまえばいいのではないでしょうか。 -- |ZnZ(ゼット エヌ ゼット) |西山和広(Kazuhiro NISHIYAMA) From morita-pub-ja @ inz.sakura.ne.jp Tue Jun 3 19:06:20 2008 From: morita-pub-ja @ inz.sakura.ne.jp (Morita Sho) Date: Tue, 03 Jun 2008 19:06:20 +0900 Subject: [migemo] =?iso-2022-jp?b?GyRCSjg7eiUvJWklOUZiJEckThsoQiBbIA==?= =?iso-2022-jp?b?GyRCJGQbKEIgXSAbJEIkTiUoJTklMSE8JVc9aE19JEskRCQkJEYbKEI=?= In-Reply-To: <8563ssf34y.wl%zn@mbf.nifty.com> References: <48427103.30600@inz.sakura.ne.jp> <8563ssf34y.wl%zn@mbf.nifty.com> Message-ID: <4845179C.8050509@inz.sakura.ne.jp> 森田です。 On 06/02/08 21:11, Kazuhiro NISHIYAMA wrote: > 3回もgsubしなくても、 > string.gsub(/[\\\[\]]/, '\\\\\&') > のようにまとめて1回で置き換えてしまえばいいのではないでしょうか。 ご指摘ありがとうございます。まさにその通りですね。 自分でもなぜあんな風に書いてしまったのか・・・。 ああ、恥ずかしい・・・。 -- Morita Sho