From: Shugo Maeda Date: 2000-10-10T00:23:47+09:00 Subject: [ruby-dev:11147] Re: /(?=a)b/ 前田です。 At Mon, 9 Oct 2000 23:15:19 +0900, Minero Aoki wrote: > これって正しい結果でしょうか? 逆を期待してました。 > > $ ruby -e 'p /(?=a)b/ === "ab"' # 「aに続いてb」のつもり > nil > $ ruby -e 'p /(?!a)b/ === "ab"' # 「a以外に続いてb」のつもり > 1 正しいです。 /(?=a)b/という正規表現は、先読みで次に来るのはaのはずなのに、その 後ではbが指定されていますから、bはaではないため、どんな文字列にも マッチしません。 /(?!a)b/は先読みで次に来るのはa以外で、その後にbが指定されている ので、"b"にマッチします。 (?=...)はあくまでも先読みなので後読みに使うことはできないというの がポイントですね。 # という話がたしか「詳説 正規表現」に載ってたと思います。 -- 前田 修吾