From: Takaishi Hayato Date: 2002-03-26T16:27:12+09:00 Subject: [ruby-list:34641] Re: scan(/(\d)?a?(\d)?b?/) こんにちは、高石です。 From: TOYOFUKU Chikanobu Subject: [ruby-list:34640] scan(/(\d)?a?(\d)?b?/) Date: Tue, 26 Mar 2002 15:45:20 +0900 Message-ID: <4.3.2-J.20020326153545.00e40a20@192.47.124.3> > 「a」と「b」の前の数字を(ないときは nil を)取り出そうと > s = "2a" > x = s.scan(/(\d)?a?(\d)?b?/) > p x > としたのですが > [["2", nil], [nil, nil]] > と最後の空文字列にまでマッチしてしまいます。$ や \Z とか > つけても同じようです。 「 ? 」は直前の正規表現の 0 または 1 回の繰返しなので、これ では空文字列にもマッチしてしまいます。 s = '1234' などでためしてみるとわかるかと思いますが、これは おそらく望まれている結果ではないでしょう。 x = s.scan(/(\d)a|(\d)b/) ではいかがでしょうか。 # 与えられる文字列(s)のパターンと、そこからどんな結果(x)を得 # たいのかをもう少し詳しく書いていただければ、もっといい回答 # が得られるかもしれません。 /--------------------------------------------------------/ 高石 勇人 < rio-t@presen.to > PGP Key(RSA): http://rio-t.presen.to/pgp/mykey.asc (DSS): http://rio-t.presen.to/pgp/mykey-dss.asc /--------------------------------------------------------/