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

Perlの正規表現に関する質問です。

日本語を抽出したいのですが、

下記のタグを含めたHTMLソースがあるとします。

<meta name="description" content="ああああああああああああああああああああああああああ">
<meta name="keywords" content="いいいいいいいいいいいいいいいいいいいいいいいいいい">

この場合、description、keywordsなどをきれいに抽出するにはどうすればいいでしょうか?

また、正規表現で参考になるサイトなどがありましたら、教えて頂けないでしょうか?

宜しくお願いします。

●質問者: zachouR
●カテゴリ:インターネット ウェブ制作
✍キーワード:HTML Perl サイト ソース タグ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

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

文字コードや他の条件にも寄るように思いますが、

$html =~ m/<meta name="description" content="(.*?)">/;
$description = $1;
$html =~ m/<meta name="keywords" content="(.*?)">/;
$keywords = $1;

とするのが一番単純かと。


ただ、このあたりは無理に自分で正規表現を書くよりも HTML をパーすするモジュールを使ったほうが間違いないですが。


また、参考資料としては perl 付属のドキュメントが手始めとしては良いでしょう。

perlretut - Perl $B$N@55,I=8=$N%A%e!<%H%j%"%k(B

◎質問者からの返答

ありがとうございます!

モジュールは今、勉強中でしてまだまだ自由に扱う事が出来ません。

大変参考になりました。

もし、よろしければご迷惑かと思いますが、お礼を多めに差し上げますので、(.*?)の部分を解説して頂けないでしょうか?


2 ● b-wind
●27ポイント

.*

ここまでで、任意の文字が0個以上にマッチする。

ただしこのままだと考えられる文字列の最大までマッチしてしまうので、

.*?

とすることで考えられる文字列の最小までに制限する。

(.*?)

それを括弧でくくる事でマッチ後、$1 .. etc の変数で参照できるようにする。

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

◎質問者からの返答

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

理解できました!


3 ● pigment
●26ポイント

while(<>){
 if(/<\s*meta\s*name\s*=\s*"(.*)"\s*content\s*=\s*"(.*)"\s*>/){
 print "$1\n";
 print "$2\n";
 }
}

空白がどのくらい入るのかわからない部分は全部¥s*

Googleで正規表現 Perlで検索するとそれなりにヒットします。

Perl Cookbookもお勧め、

CGIじゃないPerlの使い方を知ってほしいなぁとか思います。

http://www.unix.org.ua/orelly/perl/cookbook/index.htm

http://www.sarinaga.com/progtoy/perlcookbooklink.html

リンク張っちゃっていいのか不明だけど、、、

◎質問者からの返答

ありがとうございます!

参考にさせていただきます!

関連質問


●質問をもっと探す●



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