幸せサーバープロジェクト 「アイデア・技術のある人募集中」★4
757 :
trick ★ :
2009/12/09(水) 02:10:05 ID:???0 BE:198375168-PLT(90010) さて、寝る前に質問ー、眠くて頭が回らないー とある変数の文字列、例えば $a="すあまさんは$1の$2が好き"; のように特殊変数とかが文字として入っているものに マッチした結果を参照させるばやいはどうすりゃいいべ?
>>757 よく判らないのでてきとーに?
$a="すあまさんは$1の$2が好き";
my %machted_Reg_Hash = map +( $_, eval "$_"), $a=~ m|(¥$[1-9とか])|g;
で、、、
printf qq|"%s" =>"%s"|, $_, $machted_Reg_Hash{"$_"} for keys $machted_Reg_Hash{"$1"};
したら、、、
php=>RegExp
perl=>うんこー
長門=>--○◎●
になるみたいな?
♯あっと、、、evalの後には$@チェックを入れたいよなぁ・・・
>>758 ×keys $machted_Reg_Hash{"$1"};
○keys %machted_Reg_Hash;
ですたm(_ _)m深謝
×machted ○matched だよなぁ。。。
suama.pl -- $str='すあまさんは$1の$2が好きではなかった'; $c='すあまさんは\$1の\$2が好き'; $str=~s/$c(.*)$/$1/; print $str; -- >perl ./suama.pl ではなかった
evalで変数展開させて、…って書こうとしたら既に(´・ω・`)
763 :
trick ★ :2009/12/09(水) 10:28:32 ID:???P BE:33062742-PLT(90010)
わわっと、みなさんどもです。 evalでってのは思いついたんですが簡単な方法無いもんかと思いましてー 帰ったらまた弄ってみますー( ゚∀゚)y─┛~~ 頑張ってすあまさんを熟女好きに参照させますです。
> cat s.pl #!/usr/bin/perl my $a = 'すあまさんは$1の$2が好き'; my @area = ('歌舞伎町','銀座','六本木','吉原','すすきの','実家','親戚','友達'); my @who = ('幼女','ママ','熟女','女王様','腐女子','変態','オカマ'); my @b =(undef, $area[int(rand(@area))], $who[int(rand(@who))]); $a =~ s/\$(\d+)/$b[$1]/eg; $\ = "\n"; print $a; > ./s.pl すあまさんは親戚の腐女子が好き >
(´・ω・`) 親戚っていうか、妹が、なんですけどね
>>764 がとてもあぶない意味に取られる気がする><
# 「>腐女子」ってのが抜けるだけでやばすぐる
××すあまさんは親戚の腐女子が好き ×すあまさんは腐女子が好き ○すあまさんは腐女子な妹が好き なるほど。。。
769 :
trick ★ :2009/12/10(木) 01:08:44 ID:???0 BE:144648757-PLT(90010)
うーん上手くいかなーい、そんでねむーい
#!/usr/local/bin/perl
my $list_PATH = "ほげほげ";
my $list_txt_file = "$list_PATH/list.txt";
my @Inlist;
my $match_string_list;
my $host = $ENV{'REMOTE_HOST'};
my $addr = $ENV{'REMOTE_ADDR'};
if ($host eq "" || $host eq $addr) {
$host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2) || $addr;
}
open(IN, $list_txt_file);
@Inlist = <IN>;
close(IN);
@Inlist = grep(!/^(#|\n)/,@Inlist);
print << "END_OF";
Content-type:text/html\n\n
END_OF
print "あなたのホストは「 " . $host . " 」です。<br>\n";
for ($i = 0; $i < @Inlist; $i++) {
$Inlist[$i] =~s/\n//g;
($match_string_list,$display_match_string) = (split(/\t/,$Inlist[$i]))[0..1];
if ($host =~ m/$match_string_list/) {
print "リストの" . $match_string_list . "にマッチしました。<br>\n";
if ($display_match_string eq "") {
print "このホストの規制表\記は『 " . $match_string_list . " 』になります。<br>\n";
} else {
※さてここどうすっかな?
}
last;
}
}
exit;
>>765 あら?うちは嫁が腐ってますよ
果物でもなんでも熟してる方が美味しいとおもふ
$host =~ s/$match_string_list/q{"} . $display_match_string . q{"}/gee; こうですか?分かりません><
utf8にしとけよ・・
773 :
trick ★ :2009/12/10(木) 13:18:45 ID:???P BE:165312285-PLT(90010)
ふとおもた、evalのevalってできないかな?
>>771 これじゃおかしいなw
こうか
if (defined($o = $host =~ m/$match_string_list/)) {
略
}else{
$o =~ s/$match_string_list/q{"} . $display_match_string . q{"}/gee;
>>773 文字列を評価した結果を再評価なら出来るとおもう
なんかぜんぜん違う… if ($host =~ m/$match_string_list/)) { my $o = $&; 略 }else{ $o =~ s/$match_string_list/q{"} . $display_match_string . q{"}/gee; こうだった
→gee evalのevalかと♪with GPM
777 :
trick ★ :2009/12/10(木) 21:45:13 ID:???0 BE:99187946-PLT(90010)
うむむ〜みなさんどもです; 例えば$display_match_stringに表示用規制表記の「 hoge$1\d+$2.$3.hoge.ne.jp 」とかが入ってるとするじゃないですか、 $display_match_stringを評価して、さらにif ($host =~ m/$match_string_list/) {の特殊変数も評価したいばやいはどうすればいいんでしょ? みなさんのを参考に色々と試しているんですがうまくいかず・・・おいら頭わるーい( ゚∀゚)y─┛~~
何となく情報の小出し感♪ どんな引数があって、どんな戻り値を期待しているのかな? 具体的に書いてもえぇんちゃうかなぁ♪
779 :
trick ★ :2009/12/10(木) 22:04:30 ID:???0 BE:37195733-PLT(90010)
>>777 にゃにゃにゃ
if ($host =~ m/$match_string_list/)) {
my $o = $&;
略
}else{
$o =~ s/$match_string_list/q{"} . $display_match_string . q{"}/gee;
print "このホストの規制表\記は『 " . $o . " 』になります。<br>\n";
こう?
さて期待通りに動くかな
テストしてきますw
#!/usr/bin/perl use strict; use warnings; my $host='softbank218136142014.bbtec.net'; my $regex='softbank\d{6}'; if($host=~m/($regex)/){ print "$1\n"; } exit;
782 :
trick ★ :2009/12/10(木) 23:24:58 ID:???0 BE:132249784-PLT(90010)
ああそうか、何やってんだ俺_| ̄|○
>>780 $display_match_stringのバックスラッシュをエスケープする必要はあったけど、規制表記は期待通りに表示できた予感
こういう事でいいんですか?
>>779
785 :
trick ★ :2009/12/11(金) 01:19:57 ID:???0 BE:82656454-PLT(90010)
いやーすっません、無事表示できましたー げいいんは私がボケてただけですね。多謝
$display_match_stringの後方参照が展開されていないみたいだけど、これでいいの? 今はp0001-ipbf01marunouchi.tokyo.ocn.ne.jpみたいなホストが、 「ipbf01marunouchi.ocn.ne.jp」のように表示されているけど、期待された表記は「ipbf\d+marunouchi.tokyo.ocn.ne.jp」じゃ?
いや、後方参照は展開されているか \d+と表示されなければならないところが、01みたいに表示されているってことですね
>>780 でいうと、$o =~ s/$match_string_list/q{"} . $display_match_string . q{"}/gee;で置換えを実行せずに
そのままマッチした部分である$oを出力しているという感じです
789 :
trick ★ :2009/12/11(金) 12:25:21 ID:???0 BE:148781366-PLT(90010)
とりあえずすあまさんが書いたものでいいですねー 後ろの@ほにゃららとか$HOST_IPとかも表示さないとですが、あと種類もあるのか
790 :
trick ★ :2009/12/11(金) 12:45:52 ID:???P BE:144648757-PLT(90010)
あれ?\dとかは参照いらないのか?
791 :
trick ★ :2009/12/11(金) 18:06:09 ID:???P BE:115719247-PLT(90010)
わはは、俺なに酔っ払ってるんだこれ?
ここ2、3日表示用を作ってたのになんで全部参照させておっけーなんだYO
>>786 さんが正解です。すあまさんのだと正規表現全部マッチさせた結果になる訳で
>>786 さんの例だと、$host =~ m/$match_string_list/でp0001-ipbf01marunouchi.tokyo.ocn.ne.jpに
リストのip(ad|bf|bfp|ngn|gvpnf)?\d+(\w+).(\w+).ocn.ne.jpをマッチさせた
特殊変数$1のbf、$2のmarunouch、$3のtokyoだけ表示用マッチ文字列に参照させたいんです。
酒こえー、自分がなにやってるのかまで分からなくなるとは…
今夜はちょっと控えよう、一杯だけにしよう