Ruby regex: совпадение и получение позиций (позиций)
Я хотел бы совместить регулярное выражение и получить позицию в строке соответствия
Например,
"AustinTexasDallasTexas".match_with_posn /(Texas)/
Мне бы хотелось, чтобы match_with_posn
возвращал что-то вроде: [6, 17]
, где 6 и 17 - начальные позиции для обоих экземпляров слова Texas.
Есть ли что-нибудь подобное?
Ответы
Ответ 1
Используя 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]
Ответ 2
Сортировка, см. String#index
"AustinTexasDallasTexas".index /Texas/
=> 6
Теперь вы можете расширить API-интерфейс String.
class String
def indices e
start, result = -1, []
result << start while start = (self.index e, start + 1)
result
end
end
p "AustinTexasDallasTexas".indices /Texas/
=> [6, 17]