unscan -> self
[permalink][rdoc]スキャンポインタを前回のマッチの前の位置に戻します。
require 'strscan' s = StringScanner.new('test string') s.scan(/\w+/) # => "test" s.unscan s.scan(/\w+/) # => "test"
このメソッドでポインタを戻せるのは 1 回分だけです。 2 回分以上戻そうとしたときは例外 StringScanner::Error が発生します。また、まだマッチを一度も行っていないときや、前回のマッチが失敗していたときも例外 StringScanner::Error が発生します。
使用例
require 'strscan' s = StringScanner.new('test string') begin # マッチを一度も行っていないので、例外が発生する。 s.unscan rescue StringScanner::Error => err puts err # 出力例 #=> unscan failed: previous match had failed end p s.scan(/\w+/) # => "test" s.unscan begin # 二回以上戻そうとしたので、例外が発生する。 s.unscan rescue StringScanner::Error => err puts err # 出力例 #=> unscan failed: previous match had failed end p s.scan(/\w+/) # => "test" p s.scan(/\w+/) # => nil begin # 前回のマッチが失敗しているので、例外が発生する。 s.unscan rescue => err puts err # 出力例 #=> unscan failed: previous match had failed end