質問: 「Copyright 2003.」という文字列に「`^.*([0-9]+)`」という正規表現をかけたさい、 後方参照の$1(\1)には、3.が代入されます。`.*`は、貪欲なので全て(Copyright 2003.)マッチしようとしますが、それだと`[0-9]+`が困るので、3.をマッチしていない状態に戻し、`[0-9]+`にマッチさせます。 ここで質問ですが、なぜ、`[0-9]+`は、3.で満足してしまうのでしょうか。0から9のうち何れかが一回以上且つ、`+?`ではないので貪欲なはずです。 貪欲ならば、条件にあうまで貪欲にマッチしようとするのですから、2003.までマッチしてもいいような気がするのですが、なぜ3.で終わってしまうのでしょうか。 また、`[0-9]+`は、0から9の数字のうち何れかが一回以上、ですが、.までマッチして$1(\1)に代入されています。これはなぜなのでしょうか。
回答: 前者は .* が前にあるために優先的に最長一致しようとするからです。 後者は何かの間違いだと思います。 正規表現は実装によって様々ですので、JavaScript なら JavaScript と環境を明らかにした上で、該当部分のコードをもう少し詳しく載せた方が良いかと思います。