perlでs///とtr///の違いがわかりません + アルファ
[上に]
[前に]
[次に]
ラウォッチ
[E-Mail]
[HomePage]
2000/01/21(金) 14:35:00
とあるCGIで以下の式がありました。わかる方教えて下さい。
$value内はHTMLソースです。
$value =~ s/<!--(.|\n)*-->//g;
あと、
$value2 =~ s/+/ /g;
と
$value2 =~ tr/+/ /;
は同じですか?
イマイチ、s///とtr///の違いがわかりません。
よろしくお願い致します。
茶しぶ男
2000/01/21(金) 14:47:38
$value =~ s/<!--(.|\n)*-->//g;
これは、SSI書きこみを禁止してるんでショ。
$value2 =~ tr/+/ /;
これは、ワタシ良くワカランです。
ふじ
2000/01/21(金) 15:37:13
> $value2 =~ s/+/ /g;
これだとエラーですね。
$value2 =~ s/\+/ /g;
得られる結果は tr/+/ /; と同じですが、tr の方が高速です。
use Benchmark;
@t = timethese(0 , {
'TR' => '&tr;',
'S' => '&s;',
});
sub tr{
my ($a) = "gre+grtgregy+re43t+grtregeber+brehgw4th4thnb+gr";
$a =~ tr/+/ /;
}
sub s{
my ($a) = "gre+grtgregy+re43t+grtregeber+brehgw4th4thnb+gr";
$a =~ s/\+/ /g;
}
実行結果
Benchmark: running S, TR, each for at least 3 CPU seconds...
S: 3 wallclock secs ( 3.01 usr + 0.00 sys = 3.01 CPU) @ 56569.44/s (n=170274)
TR: 5 wallclock secs ( 3.02 usr + 0.00 sys = 3.02 CPU) @ 145992.05/s(n=440896)
ラウォッチ
2000/01/21(金) 16:49:49
茶しぶ男さん、ふじさん、早速の回答ありがとうございました。
$value =~ s/<!--(.|\n)*-->//g;
は”これは、SSI書きこみを禁止してるんでショ。”
ですが、パール的に説明してもらえますか、よくわかりません。
ふじさんへ
わざわざ、Benchmarkまでしてもっらて、ありがとうございます。
trは正規表現でないのですね。知らなかったというより使ったことなかったです。
勉強になりました。
茶しぶ男
2000/01/21(金) 17:01:26
> $value =~ s/<!--(.|\n)*-->//g;
> は”これは、SSI書きこみを禁止してるんでショ。”
> ですが、パール的に説明してもらえますか、よくわかりません。
一つ一つ説明すると…
-----------------------------------------------------------
任意の文字(.)、又は(|)改行(\n)が、0文字以上続く場合は、それを削除する。
-----------------------------------------------------------
ということですね。
# カッコ内の文字は、その前に書かれてあることを表しています。
つまり、SSIは例えば
<!--#exec cmd="〜"-->
という風に記述しますが、それを掲示板に書かれた時には強制的に削除する…って、ことですね。
ラウォッチ
2000/01/21(金) 17:19:46
[[解決]]
理解できました。
正規表現が手足のように使えこなせるといいですね。
旧名ふにゃちんさん、ありがとう。旧名ちゃいちゃんパパより。
[上に]
[前に]
[次に]