StringScanner は文字列スキャナクラスです。簡単に高速なスキャナを記述できます。
StringScanner
ちょっと試してみた。
require 'strscan' s = StringScanner.new("<a>aaaa</a>bbbb<c>cccccc</c>aaa")
スキャン
s.scan_until(/<.*?>/)<a>aaaa</a>bbbb<c>cccccc</c>aaa
s.matched<a>aaaa</a>bbbb<c>cccccc</c>aaa
s.pre_match<a>aaaa</a>bbbb<c>cccccc</c>aaa
s.post_match<a>aaaa</a>bbbb<c>cccccc</c>aaa
スキャン
s.scan_until(/<.*?>/)<a>aaaa</a>bbbb<c>cccccc</c>aaa
s.matched<a>aaaa</a>bbbb<c>cccccc</c>aaa
s.pre_match<a>aaaa</a>bbbb<c>cccccc</c>aaa
s.post_match<a>aaaa</a>bbbb<c>cccccc</c>aaa
スキャン
s.scan_until(/<.*?>/)<a>aaaa</a>bbbb<c>cccccc</c>aaa
s.matched<a>aaaa</a>bbbb<c>cccccc</c>aaa
s.pre_match<a>aaaa</a>bbbb<c>cccccc</c>aaa
s.post_match<a>aaaa</a>bbbb<c>cccccc</c>aaa
スキャン
s.scan_until(/<.*?>/)<a>aaaa</a>bbbb<c>cccccc</c>aaa
s.matched<a>aaaa</a>bbbb<c>cccccc</c>aaa
s.pre_match<a>aaaa</a>bbbb<c>cccccc</c>aaa
s.post_match<a>aaaa</a>bbbb<c>cccccc</c>aaa
スキャン
s.scan_until(/<.*?>/)<a>aaaa</a>bbbb<c>cccccc</c>aaa
s.rest?#=> true
s.rest<a>aaaa</a>bbbb<c>cccccc</c>aaa