まつもと ゆきひろです

In message "[ruby-list:9267] 正規表現"
    on 98/08/25, "民斗 " <tommy / valley.ne.jp> writes:

|民斗です。
|
|Ruby の正規表現について教えてください。

うっ,正規表現は鬼門なのですが.

|# "." は "\n" には適合しないようなので…

まず,これから.現状ではemacsにあわせてそのようになっていま
す.正規表現は歴史的にそういう動作をするものが多く,perlがや
や例外的だと考えているので,あまりあわせる必然性を感じたこと
は無いのですが,議論の結果によっては変更の余地はあるかもしれ
ませんです.ただし,perlのs/m optionのような切り替えを導入す
る意志は今のところ全く無いです.

|% ruby -e '"<TD>aa</TD><TD>bb</TD><TD>cc</TD>" =~ /<TD.*?>((.|\n)*?)<\/TD>/; p $1'
|"<TD>cc"
|
|…となり、"aa" が取り出せません。
|どうすれば期待通りに動くのでしょう。

えーとですね.残念ながら正規表現のバグです.半日苦しんだ挙げ
句,以下のパッチでちゃんと動作するようになったように思えるの
ですが,なんといっても前述の通り正規表現は鬼門ですから,別の
局面で動作がおかしくなっている可能性は否定できません.一応,
稲葉さんのregression testの結果は悪くなってないのですが.

                                まつもと ゆきひろ /:|)

--- regex.c	1998/07/29 09:50:31	1.1.1.2.2.29
+++ regex.c	1998/08/25 17:30:31
@@ -3690,2 +3690,4 @@
 	}
+      while (stackp != stackb && (int)stackp[-1] == 1)
+	POP_FAILURE_POINT();
       continue;  /* Successfully executed one pattern command; keep going.  */