- ベストアンサー
/(.)(\d\d)+(.)/ =~ "123456"のとき、 p $
/(.)(\d\d)+(.)/ =~ "123456"のとき、 p $2とすると、"45"となるのはなぜですか? p $2 #=>23 となると思っていました。 そして、いったい23はどうすれば後方参照できるのですか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
(\d\d)+ は、2つの数字の1回以上の繰り返しですから、"23"と"45"にマッチします。 ですから、$2には最後にマッチした"45"を指すことになります。 もし対象の文字列が"12345"であれば、"23"と"45"にマッチさせると最後の(.)にマッチする文字が無くなってしまうので、$2は"23"になりますね($3は"4") > いったい23はどうすれば後方参照できるのですか? /(.)(\d\d)/ =~ "123456" p $2 ではダメでしょうか?
その他の回答 (2)
- notnot
- ベストアンサー率47% (4900/10358)
回答No.3
元の意味を出来るだけ保つなら、 /(.)(\d\d)(\d\d)*(.)/ =~ "123456" p $2 でしょうね。
質問者
お礼
回答ありがとうございます。 そうなりますね。
- nekomikekamo
- ベストアンサー率73% (71/97)
回答No.2
「23」と「45」と言ったマッチした部分全てが必要な場合には、 scanを利用してみてはいかがでしょうか? =~では、最後にマッチした文字列のみが取得されます。 "123456".match(/.(\d+)./)[1].scan(/\d\d/) #["23", "45"]
質問者
お礼
回答ありがとうございます。 matchを使うとマッチさせる開始部分を指定できるんですね。 初めて知りました。
お礼
いつも回答ありがとうございます。 的確な説明に感謝しています。 よくわかりました。