2009-12-14
■ [正規表現]アトミック、強欲

(?> )
バックトラックを抑止する。
この表現はまだ試験実装中です。将来なくなる可能性もありますので、そのつもりで使ってください。特に汎用ライブラリなどで使ってはいけません。
正規表現
アトミック、強欲等、様々な呼び方があるが、要はバックトラックを抑止されてしまう。
> hoge = "hoge 'foo' 'foo' bar" > hoge =~ /(?>'.*')\s'foo' bar/ #アトミック。「(?>'.*')が、「'foo' 'foo'」にマッチし、それ以降は「'foo' bar」にマッチできなくなってしまう。 => nil > hoge =~ /'.*'\s'foo' bar/ #欲張り。初回は「'foo' 'foo'」にマッチするが、それ以降の「'foo'」に対応できる文字列は見つからないので、バックトラック。 => 5
コメントを書く