Здесь стоит обратить внимание, в зависимости от ожидаемого поведения.
Если вы ищете /dad/
в "dadad"
, вы получите только [["dad",0]]
, потому что scan
продвигается к концу каждого матча, когда находит его (что неправильно для меня).
Я придумал эту альтернативу:
def scan_str(str, pattern)
res = []
(0..str.length).each do |i|
res << [Regexp.last_match.to_s, i] if str[i..-1] =~ /^#{pattern}/
end
res
end
Если вы хотите, вы можете сделать то же самое с StringScanner из стандартной библиотеки, это может быть быстрее для длинных строк.