• 締切済み

文字の抜き取りについてソースを教えて下さい

$data1 = "<abcd>東京都港区赤坂六本木1丁目1-1</abcd>"; 上記の様に、$data1に入っているデータから 【東京都港区赤坂六本木1丁目1-1】 の部分のみを抜き取り $data2へ入れたい場合 どのようなソースになりますか? 下記のように記述してみましたが 誤りのようで うまく記述(print)されませんでした。 if ($data1 =~ /<abcd>(\D+)<\/abcd>/){ $data2 = $1; } print "$data2" ; 尚、【】内の文字列は随時変化します。 初心者ですので、ご教授をお願いします。

みんなの回答

  • kabaokaba
  • ベストアンサー率51% (724/1416)
回答No.2

\d は数字 \D は数字以外 住所には数字がある だからマッチしない. 一番単純なのは以下のような感じ. Perlのバージョンと実行環境が不明だから Windows上でPerl5.8以降を使ってると仮定したコードです. use strict; use warnings; use encoding q(shiftjis); my $data1 = "<abcd>東京都港区赤坂六本木1丁目1-1</abcd>"; my $data2; if ( $data1 =~ m{<abcd>(.*)</abcd>}gms ){ $data2 = $1; } print $data2;

unipre
質問者

お礼

回答ありがとうございました。 おかげさまで解決しました。 $data1 =~ m{<abcd>(.*)</abcd>}gms の部分が分からず 回答を基に手元の参考書を見ながら なるほど!と勉強させていただきました。 ありがとうございました。

  • salieri29
  • ベストアンサー率30% (7/23)
回答No.1

あまり詳しくなくて申し訳ないのですが。 $s =~ s/<abcd>//g; $s =~ s/</abcd>//g; こんな感じで前後の文字を置換して消してしまうのはどうでしょうか? あまりスマートなやり方ではないですが。

unipre
質問者

お礼

回答ありがとうございます。 $data1に代入されるデータは 実は複数行でして せっかく回答いただきましたが適用出来ませんでした。 一つの勉強として捉えたいと思います。

関連するQ&A

専門家に質問してみよう