[#34647] fork 不可能な環境での test_argv0_noarg — wanabe <s.wanabe@...>

ワナベと申します。

13 messages 2008/05/11
[#34667] Re: fork 不可能な環境での test_argv0_noarg — Yukihiro Matsumoto <matz@...> 2008/05/13

まつもと ゆきひろです

[#34742] Ruby 1.8.7-preview3 has been released — "Akinori MUSHA" <knu@...>

 Ruby 1.8.7-preview3 をリリースしました。

14 messages 2008/05/18
[#34744] Re: [ruby-list:44957] Ruby 1.8.7-preview3 has been released — Takahiro Kambe <taca@...> 2008/05/19

お疲れ様です。

[#34800] Windows2000上でtrunkがビルドできない — KIMURA Koichi <kimura.koichi@...>

木村です。

18 messages 2008/05/22
[#34801] Re: Windows2000上でtrunkがビルドできない — "U.Nakamura" <usa@...> 2008/05/22

こんにちは、なかむら(う)です。

[#34824] Re: Windows2000上でtrunkがビルドできない — KIMURA Koichi <kimura.koichi@...> 2008/05/23

木村です。

[#34850] Re: Windows2000上でtrunkがビルドできない — KIMURA Koichi <kimura.koichi@...> 2008/05/26

木村です。

[#34854] Re: Windows2000上でtrunkがビルドできない — "U.Nakamura" <usa@...> 2008/05/26

こんにちは、なかむら(う)です。

[#34889] Ruby 1.8.7-preview4 test-all failed in OpenSSL::TestSSL — Nobuhiro IMAI <nov@...>

いまいです。

10 messages 2008/05/29

[ruby-dev:34729] Re: バックスラッシュを含むsub/gsubの挙動

From: rubikitch@...
Date: 2008-05-16 11:56:20 UTC
List: ruby-dev #34729
From: "keisuke fukuda" <keisukefukuda@gmail.com>
Subject: [ruby-dev:34727] バックスラッシュを含むsub/gsubの挙動
Date: Fri, 16 May 2008 20:38:44 +0900

るびきちです。

# ruby-list向きかな。

> sub/gsubの挙動で、
> ' → \\'
> という置換をしようとした場合の挙動についてです。下記の動作は意図的なものでしょうか?
> ' (シングルクォート)以外も、起こる文字と起こらない文字があるようです。
> 網羅的に試したわけではないですが、'& などでは起こり、$#などでは起こりません。

意図した仕様です。

--- gsub(pattern, replace) -> String

文字列中で pattern にマッチする部分全てを
文字列 replace で置き換えた文字列を生成し返します。

Ruby 1.6 以前では pattern が文字列の場合、
その文字列を正規表現にコンパイルしていました。
しかし Ruby 1.8 以降では、その文字列そのものがパターンになります。

置換文字列 replace 中の \& と \0 はマッチした部分文字列に、
\1 ... \9 は n 番目の括弧の内容に置き換えられます。
置換文字列内では \`、\'、\+ も使えます。
これらは [[m:$`]]、[[m:$']]、[[m:$+]] に対応します。


--- $'

現在のスコープで最後に成功した正規表現のパターンマッチでマッチした
部分より後ろの文字列です。

最後のマッチが失敗していた場合には nil。

[[m:Regexp.last_match]].post_match と同じです。

この変数はローカルスコープかつスレッドローカルです。


================
# *1
"'foo'".sub(/'/, "\\'")        # => "foo'foo'"
# *2
"'foo'".sub(/'/, %q!\'!)       # => "foo'foo'"
# *3
"'foo'".sub(/'/) { |m| Regexp.last_match.post_match } # => "foo'foo'"

*1を等価なものに書き換えると*2になります。
で、置換文字列が「\'」なので後にマッチした文字列「foo'」に置き換わるのです。
ブロック記法にすると*3とも等価です。

--
rubikitch
Blog: http://d.hatena.ne.jp/rubikitch/
Site: http://www.rubyist.net/~rubikitch/

In This Thread