>>553
ちょっと違うが、以前似たような問題(*1)に遭遇した時の解決方法を書いとく。
※念のため言っとくと、マルチスレッドなOSじゃないと使えない方法。

forkして、子供側でマッチを行う。完了したら終了ステータスでマッチに成功したかだけを返すようにする。
で、親側は子供の終了をn秒待って、それまでに終了しなかったら、子供をkillして「マッチ失敗」を返す。
n秒以内に帰ってきたら終了ステータスを元に結果を返す。

(*1)複雑な正規表現に文字列がマッチするかだけをチェックする処理で、たまにマッチが終わらなかった。
※正規表現のマッチ中はrubyのスレッドが切り替わらないのでtimeoutが使えない。