こんばんは。

At Mon, 21 Aug 2000 00:54:17 +0900,
Yukihiro Matsumoto <matz / zetabits.com> wrote:
> これは不具合ではないですね。NFAを使っているものはこのパター
> ンはのきなみ全滅じゃないでしょうか。
(snip)
> たとえば、egrepでもDFA型で対応できないバックリファレンスを含
> むものは、NFA型を使うことになるので同じような状況で、同じよ
> うな理由で失敗します。
> 
> $ echo " 111 " | egrep -E ' (1+){2}\1 '
> $ echo " 11 "  | egrep -E '( )(1+){2}\1'
> 
> これはこういうものだと考えてもらう方が良いと思います。より詳

 なるほど。しかし、使用の際に実装に使われているアルゴリズムの
特性を意識しないといけないというのは辛いですね。

 ともかく、 {n} や {n,m} は注意して使わないといけないという
ことは分かりました。

 今回の元の例の場合も、

	/ (1{1,2}){2} /	-> / 1{1,2}(1{1,2}) /
	/ (1+){2} /	-> / 1+(1+) /

のようにすれば問題は回避できますし。

> しくは『詳説・正規表現』(オライリー・ジャパン/オーム社)を参
> 照してください。

 この本は今は手元にないのですが、また入手して読んでみます。

> 「GNU regex + Perl 拡張を使っている」のはRubyだけです。Perl
> は「Henry Spencer V8 regexp + Perl拡張」です。

 確かに。よく確認するべきでした。

-- 
                           /
                          /__  __       
                         / )  )  ) )  /
Akinori -Aki- MUSHA aka / (_ /  ( (__(  @ idaemons.org / FreeBSD.org

"We're only at home when we're on the run, on the wing, on the fly"