From: Minero Aoki Date: 2000-10-10T02:18:56+09:00 Subject: [ruby-dev:11149] Re: /(?=a)b/ あおきです。 In mail "[ruby-dev:11147] Re: /(?=a)b/" Shugo Maeda 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"にマッチします。 > > (?=...)はあくまでも先読みなので後読みに使うことはできないというの > がポイントですね。 うむむ、なるほどお。納得しました。先読みってそういうことでしたか。 置いてあるその場所からうしろにむかってパターンがあるってことですね。 ぼくが想定したようなのは「後読み」なんですね。詳説正規表現ちょこっと 読んでもわかんなかったんですがようやく理解しました。 (?=....) っていうのはマッチした記憶をスタックに積まないマッチだと 勘違いしてました。 どうもお騒がせしました。 まつもとさんもありがとうございます。 ------------------------------------------------------------------- あおきみねろう