It is so much better to use a parser, even with a tiny fragment, unless you are sure the string will never change format and you own the process from end-to-end.
That said, to meet your requirement of a regex, I'd use String.scan:
str = "lorem <tt>text1</tt> ipsum <tt>text2</tt>dolor si amet"
str.scan(%r{<tt>([^<]+)</tt>}).flatten # => ["text1", "text2"]
Just to show how simple using a parser is:
require 'nokogiri'
doc = Nokogiri::HTML(str)
doc.css('tt').map(&:text) # => ["text1", "text2"]
The benefit is flexibility and robustness.