Techioz Blog

Ruby 正規表現: 一致して位置を取得します

概要

正規表現に一致し、一致した文字列内の位置を取得したいと考えています

例えば、

"AustinTexasDallasTexas".match_with_posn /(Texas)/

match_with_posn が次のようなものを返したいと考えています: [6, 17] ここで、6 と 17 は単語 Texas の両方のインスタンスの開始位置です。

このようなことはありますか?

解決策

Ruby 1.8.6 以降を使用すると、次のことができます。

require 'enumerator' #Only for 1.8.6, newer versions should not need this.

s = "AustinTexasDallasTexas"
positions = s.enum_for(:scan, /Texas/).map { Regexp.last_match.begin(0) }

これにより、次の配列が作成されます。

=> [6, 17]