まつもと ゆきひろです

In message "[ruby-list:16213] Re: year of parsedate"
    on 99/08/19, Tadayoshi Funaba <tadf / kt.rim.or.jp> writes:

|kikutani> うーん、前は同じプログラムが動いてたんですよ。
|kikutani> slanglibのサンプルのfm.rbというので、ファイルの生成日を
|kikutani> 表示してたんで。すくなくとも1.2あたりでは。
|
|なんか微妙に正規表現の解釈が違ってきているような気がします。
|以下のものも試してもらえません?

ほぼ正解です。気が付くのが遅くてすいません。

以前、高速化のために「えせPOSIXマッチ(あきらめ悪いモード)」
を廃止したときの影響です。つまり、

  \s*\s+

というパターンは以前だと後ろの\s+が前の\s*からマッチを取り返
して成功していましたが、今は\s*が全部の空白をぶんどってしまっ
て\s+のための空白が残りませんから失敗します。

というわけで、私はこういう風にしてみました。

--- /tmp/parsedate.rb	Thu Aug 19 12:58:25 1999
+++ lib/parsedate.rb	Thu Aug 19 12:57:51 1999
@@ -29,3 +29,3 @@
     end
-    if date.sub!(/(\d+):(\d+)(?::(\d+))?\s*(am|pm)?\s*(?:\s+([a-z]{1,4}(?:\s+[a-z]{1,4})?|[-+]\d{4}))?/i, ' ')
+    if date.sub!(/(\d+):(\d+)(?::(\d+))?(?:\s*(am|pm))?(?:\s+([a-z]{1,4}(?:\s+[a-z]{1,4})?|[-+]\d{4}))?/i, ' ')
       hour = $1.to_i