「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)に代入されています。これはなぜなのでしょうか。
「…ですが、.までマッチして$1(\1)に代入されています」というくだりですが、本当にそうなっていますか。
ご返答有難うございます。dreamweaverCS6で、拡張子がtxtのファイルの一行目に記述した正規表現「(^.*)([0-9]+)」で「Copyright 2003.」を「$1と$2」のように置換すると「Copyright 200と3.」となりました。つまり$2(※質問文では$1)には、3.が代入されています。
「^.*」は ‘Copyright 200’ に、「[0-9]+」は ‘3’ にマッチし、マッチの範囲外の ‘.’ は置換されないまま、ということではないかと思います。
「$1と$2と」に置換すると「Copyright 200と3と.」になるはずです。
ご返答有難うございました。なるほど、単なる勘違いでした。
回答3件
あなたの回答
tips
プレビュー