幸せサーバープロジェクト 「アイデア・技術のある人募集中」★4

このエントリーをはてなブックマークに追加
757trick ★
さて、寝る前に質問ー、眠くて頭が回らないー

とある変数の文字列、例えば $a="すあまさんは$1の$2が好き"; のように特殊変数とかが文字として入っているものに
マッチした結果を参照させるばやいはどうすりゃいいべ?
758 ◆TWARamEjuA :2009/12/09(水) 07:14:13 ID:DcmcEaIX0
>>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の後には$@チェックを入れたいよなぁ・・・
759 ◆TWARamEjuA :2009/12/09(水) 07:15:37 ID:DcmcEaIX0
>>758
×keys $machted_Reg_Hash{"$1"};
○keys %machted_Reg_Hash;
ですたm(_ _)m深謝
760 ◆TWARamEjuA :2009/12/09(水) 07:16:29 ID:DcmcEaIX0
×machted
○matched

だよなぁ。。。
761Treat ◆??? :2009/12/09(水) 07:23:57 ID:nDdA5Azk0
suama.pl
--
$str='すあまさんは$1の$2が好きではなかった';
$c='すあまさんは\$1の\$2が好き';
$str=~s/$c(.*)$/$1/;
print $str;
--
>perl ./suama.pl
ではなかった
762 ◆SUAMA.Cbav5m :2009/12/09(水) 08:16:39 ID:Fwequ5WWO
evalで変数展開させて、…って書こうとしたら既に(´・ω・`)
763trick ★:2009/12/09(水) 10:28:32 ID:???P BE:33062742-PLT(90010)
わわっと、みなさんどもです。

evalでってのは思いついたんですが簡単な方法無いもんかと思いましてー
帰ったらまた弄ってみますー( ゚∀゚)y─┛~~

頑張ってすあまさんを熟女好きに参照させますです。
764△ ◆garnetGnNk @garnet ★:2009/12/09(水) 12:40:25 ID:???0 BE:541153038-2BP(1245)
> 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
すあまさんは親戚の腐女子が好き
>
765● ◆SUAMA.Cbav5m :2009/12/09(水) 13:07:52 ID:TS33xQb4P BE:1205725875-PLT(23334)
(´・ω・`) 親戚っていうか、妹が、なんですけどね
766 ◆SUAMA.Cbav5m :2009/12/09(水) 16:14:02 ID:Fwequ5WWO
>>764がとてもあぶない意味に取られる気がする><

# 「>腐女子」ってのが抜けるだけでやばすぐる
767 ◆SUAMA.Cbav5m :2009/12/09(水) 16:15:10 ID:Fwequ5WWO
orz

>>766
×>>764
>>765
768動け動けウゴウゴ2ちゃんねる:2009/12/10(木) 01:02:57 ID:hjkraN8X0
××すあまさんは親戚の腐女子が好き
×すあまさんは腐女子が好き
○すあまさんは腐女子な妹が好き

なるほど。。。
769trick ★: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
あら?うちは嫁が腐ってますよ
770動け動けウゴウゴ2ちゃんねる:2009/12/10(木) 01:54:03 ID:yqhIUMF10
果物でもなんでも熟してる方が美味しいとおもふ
771 [―{}@{}@{}-] 動け動けウゴウゴ2ちゃんねる:2009/12/10(木) 02:03:48 ID:1XyITk/p0
$host =~ s/$match_string_list/q{"} . $display_match_string . q{"}/gee;

こうですか?分かりません><
772Treat ◆??? :2009/12/10(木) 07:19:07 ID:PWSXzo0z0
utf8にしとけよ・・
773trick ★:2009/12/10(木) 13:18:45 ID:???P BE:165312285-PLT(90010)
ふとおもた、evalのevalってできないかな?
774 [―{}@{}@{}-] 動け動けウゴウゴ2ちゃんねる:2009/12/10(木) 15:46:32 ID:Ncv056wF0
>>771
これじゃおかしいなw
こうか

if (defined($o = $host =~ m/$match_string_list/)) {

}else{
$o =~ s/$match_string_list/q{"} . $display_match_string . q{"}/gee;

>>773
文字列を評価した結果を再評価なら出来るとおもう
775 [―{}@{}@{}-] 動け動けウゴウゴ2ちゃんねる:2009/12/10(木) 15:59:35 ID:50oGfWxY0
なんかぜんぜん違う…
if ($host =~ m/$match_string_list/)) {
my $o = $&;

}else{
$o =~ s/$match_string_list/q{"} . $display_match_string . q{"}/gee;

こうだった
776 ◆TWARamEjuA :2009/12/10(木) 20:04:15 ID:3xs1aLbd0
→gee
evalのevalかと♪with GPM
777trick ★: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─┛~~
778 ◆TWARamEjuA :2009/12/10(木) 21:51:11 ID:3xs1aLbd0
何となく情報の小出し感♪

どんな引数があって、どんな戻り値を期待しているのかな?
具体的に書いてもえぇんちゃうかなぁ♪
779trick ★:2009/12/10(木) 22:04:30 ID:???0 BE:37195733-PLT(90010)
まんま>>769ですよー
自分のホストの規制表記を表示させようとおもてー

http://imo.70.kg/test.cgi
780 [―{}@{}@{}-] 動け動けウゴウゴ2ちゃんねる:2009/12/10(木) 22:54:19 ID:1XyITk/p0
>>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
781● ◆SUAMA.Cbav5m :2009/12/10(木) 23:10:24 ID:dQ5JxvgoP BE:1205726257-PLT(23334)
#!/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;
782trick ★:2009/12/10(木) 23:24:58 ID:???0 BE:132249784-PLT(90010)
ああそうか、何やってんだ俺_| ̄|○
783 [―{}@{}@{}-] 動け動けウゴウゴ2ちゃんねる:2009/12/10(木) 23:25:53 ID:yRRW161i0
>>780
$display_match_stringのバックスラッシュをエスケープする必要はあったけど、規制表記は期待通りに表示できた予感
こういう事でいいんですか?>>779
784● ◆SUAMA.Cbav5m @SUAMA ★:2009/12/10(木) 23:27:10 ID:???P BE:826783564-PLT(23334)
とりあえず>>781を適当にCGIにしてみたので試してもらえるとうれしいな

ttp://imo.70.kg/test3.cgi

# 引っかかった部分を出すだけでいいと思ったんだ
785trick ★:2009/12/11(金) 01:19:57 ID:???0 BE:82656454-PLT(90010)
いやーすっません、無事表示できましたー
げいいんは私がボケてただけですね。多謝
786 [―{}@{}@{}-] 動け動けウゴウゴ2ちゃんねる:2009/12/11(金) 11:52:27 ID:aB1keR8K0
$display_match_stringの後方参照が展開されていないみたいだけど、これでいいの?
今はp0001-ipbf01marunouchi.tokyo.ocn.ne.jpみたいなホストが、
「ipbf01marunouchi.ocn.ne.jp」のように表示されているけど、期待された表記は「ipbf\d+marunouchi.tokyo.ocn.ne.jp」じゃ?
787 [―{}@{}@{}-] 動け動けウゴウゴ2ちゃんねる:2009/12/11(金) 11:54:26 ID:aB1keR8K0
いや、後方参照は展開されているか
\d+と表示されなければならないところが、01みたいに表示されているってことですね
788 [―{}@{}@{}-] 動け動けウゴウゴ2ちゃんねる:2009/12/11(金) 11:58:57 ID:aB1keR8K0
>>780でいうと、$o =~ s/$match_string_list/q{"} . $display_match_string . q{"}/gee;で置換えを実行せずに
そのままマッチした部分である$oを出力しているという感じです
789trick ★:2009/12/11(金) 12:25:21 ID:???0 BE:148781366-PLT(90010)
とりあえずすあまさんが書いたものでいいですねー
後ろの@ほにゃららとか$HOST_IPとかも表示さないとですが、あと種類もあるのか
790trick ★:2009/12/11(金) 12:45:52 ID:???P BE:144648757-PLT(90010)
あれ?\dとかは参照いらないのか?
791trick ★: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だけ表示用マッチ文字列に参照させたいんです。

酒こえー、自分がなにやってるのかまで分からなくなるとは…
今夜はちょっと控えよう、一杯だけにしよう