[#44237] Float を利用するRubyプログラム — SASADA Koichi <ko1@...>

 ささだです.

16 messages 2007/11/17
[#44241] Re: Float を利用するRubyプログラム — SASADA Koichi <ko1@...> 2007/11/19

 ささだです.

[ruby-list:44194] Re: 式展開で正規表現を使う場合、うまく展開されない

From: "eklerni@..." <eklerni@...>
Date: 2007-11-08 16:55:12 UTC
List: ruby-list #44194
eklerniです。

07/11/09 に ANAKI Kyosuke<anaki@pobox.com> さんは書きました:
>  式展開で正規表現を使う場合、どうもうまく展開ができません。
> 例えば、以下のような文字列testにリンクを貼る場合、
> ()でくくった部分に対して何らかの処理を行うとします。
>
> $KCODE = "UTF-8"
> test ="→abc←"
> print test.gsub(/→(.+?)←/ , '<a href="' + "#{$1.upcase}"
> + '">\1</a>')
>
> この場合、
> <a href="ABC">abc</a>
> という結果を期待しているのですが、$1はなぜかnilに
> なってしまいます(で、エラーになる)。
> この場合、$1と\1は両方とも「abc」になると
> 思うのですが……。
>
> どなたかアドバイスをいただけると助かります。

第二引数の内部で $<数字> を使うことはできません。この文字列が評価される時点ではまだマッチは行われていないからです。詳しくはマニュアルのString#gsubの項を参照してください(今は繋がらなくなっていますが)。

回避策としてブロック付きでメソッドを呼ぶことで$<数字>を使うことができます。

$KCODE = "UTF-8"
test ="→abc←"
print test.gsub(/→(.+?)←/){%Q[<a href="#{$1.upcase}">#$1</a>]}
#=> <a href="ABC">abc</a>

In This Thread