こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

$data1 = "<abcd>東京都港区赤坂六本木1丁目1-1</abcd>";

上記の様に、$data1に入っているデータから
【東京都港区赤坂六本木1丁目1-1】 の部分のみを抜き取り
$data2へ入れたい場合
どのようなソースになりますか?
下記のように記述してみましたが 誤りのようで
うまく記述(print)されませんでした。

if ($data1 =~ /<abcd>(\D+)<\/abcd>/){
$data2 = $1;
}
print "$data2" ;

尚、【】内の文字列は随時変化します。
初心者ですので、ご教授をお願いします。

投稿日時 - 2008-01-06 21:00:27

QNo.3655952

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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;

投稿日時 - 2008-01-06 21:22:50

お礼

回答ありがとうございました。
おかげさまで解決しました。

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

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

投稿日時 - 2008-01-06 22:45:59

ANo.1

あまり詳しくなくて申し訳ないのですが。

$s =~ s/<abcd>//g;
$s =~ s/</abcd>//g;

こんな感じで前後の文字を置換して消してしまうのはどうでしょうか?
あまりスマートなやり方ではないですが。

投稿日時 - 2008-01-06 21:10:58

お礼

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

投稿日時 - 2008-01-06 22:43:01

あなたにオススメの質問