人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Perl に関する質問です。

@test1 = ( "AAAAA\n" , "BBBBB\n" , "CCCCC\n" , "DDDDD\n" , "EEEEE\n" );
@test2 = ( "BBBBB\n" , "CCCCC\n" );

上記の2つの変数がある場合、

@test1 =~ m/@test2/;

というのを有効にする方法はあるでしょうか?

正規表現がよく理解できていないまま、このようにやってみたのですが、
うまくいきませんでした。

どなたか、よろしくお願いいたします。

Perl ver5.8.8

●質問者: zachouR
●カテゴリ:インターネット ウェブ制作
✍キーワード:Perl 変数 正規表現
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● b-wind
●23ポイント ベストアンサー

配列をそのまま使うことは無理。

正規表現 - Wikipedia


何がやりたいかが良く分からないので、明示してもらえれば代替案は出せるかも。

◎質問者からの返答

ありがとうございます。

$html = "d:\index.html";

open(LOAD,$html) || &error("Open Error : $html");

@test1 = <LOAD>;

close(LOAD);

このようにして、@test1の中にHTMLソースを入れています。

その「 @test1 」の中に「 @test2 」がきちんと入っているかどうかを調べたいのです。

自分が考えた方法は、@test1、@test2をjoinで連結してマッチしてみる、という方法なのですが、、、。

よろしくお願いします。


2 ● amagami
●23ポイント

こういう処理ではいかがでしょうか。

@test1 = ( "AAAAA\n" , "BBBBB\n" , "CCCCC\n" , "DDDDD\n" , "EEEEE\n" );

@test2 = ( "BBBBB\n" , "CCCCC\n" );

@result = ();

foreach $hoo (@test2) {

 foreach $bar (@test1) {

  push @result, $bar if $hoo =~ m/$bar/;

 }

}

@test1 = @result;

print @test1;

http://q.hatena.ne.jp/answer

◎質問者からの返答

ありがとうございます!

あまり、やりたいことを詳しく書いてなかったため、伝わりにくくすいませんでした。

こちらは、置き換えたりする場合に参考にさせていただきたいと思います。


3 ● b-wind
●22ポイント

あんまり複雑にしても面倒でしょう。

$test1 = join '', @test1;
$test2 = join '', @test2;
if ( index ( $test1 , $test2 ) != 1 ) {
 print "match!\n";
}else{
 print "unmatch!\n";
}

でいいんでは。

第9章 文字列とディレクトリの操作

◎質問者からの返答

ありがとうございます!

if ( index ( $test1 , $test2 ) != 1 ) {

の1の部分ですが、、、?1でなくてもいいのでしょうか?


4 ● b-wind
●22ポイント

if ( index ( $test1 , $test2 ) != 1 ) {

の1の部分ですが、、、?1でなくてもいいのでしょうか?

あ、失礼 -1 です。


2番の方と自分のはそもそも問題の捉えかたがいます。

質問からはどちらか分からないので、都合のいいほうを選択してください。

http://q.hatena.ne.jp/answer

◎質問者からの返答

はい、ありがとうございます。

こちらで使えそうなソースはb-windさんのほうです。しかし、置き換えたりする場合は2番のかたのソースを参考にしたいと思います。

さっそく組み込んだところ、きちんと動作いたしました。

今後は、まとめて置き換えたりできるようにするつもりです。

ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ