まつもと ゆきひろです

In message "[ruby-list:34529] gsub! /(^|[^0-9])(?=[a-z])/"
    on 02/03/21, "TOYOFUKU Chikanobu" <toyofuku / juice.or.jp> writes:

|  直前の文字が数字でないアルファベットの前に「@」を
|付けようと次のスクリプトを書いたのですが2文字目の
|「a」の前にだけ付きません。仕様でしょうか。
|ver1.6.7 です。

仕様です。

|# ruby
|x = "aa7cabc3a25baa\n"
|x.gsub!(/(^|[^0-9])(?=[a-z])/, "\\1@")
|print x # => @aa7c@a@b@c3a25b@a@a

先頭のaにマッチしたあと、a7cabc3a25baa と /(^|[^0-9])(?=[a-z])/
をマッチさせるのですが、

  ^は文字列の先頭ではないのでマッチしない
  [^0-9]はaにマッチするが、7は[a-z]にマッチしない

のでマッチしません。Perlは^が文字列の先頭でなくてもマッチす
るんですね。^を\Gに置換えると動作します。