foobar|fooxar|foozap|foozaのような正規表現は、パイプを減らしてfoo(?:bar|xar|zap?)とすることで高速に動作する。 とはいえ一発で後者のような正規表現はなかなか書きにくい。そこでそれを自動化するために書いたのが次のコード。 require 'forwardable' class Regexp class Trie def self.union(*patterns) trie = new patterns.each { |pattern| trie << pattern } trie.to_regexp end extend Forwardable def_delegators :@map, :include?, :[], :[]= def initialize @map = {} end def add(expr) ref = self expr.e