- ベストアンサー
正規表現で指定範囲の文字列の取得
perlでRSSファイルを取得してTITLEタグの内容を抜き出したいのですが、 XML::RSSが使えない状況では、どのようにしたらいいでしょうか? my $document = LWP::Simple::get($url)後に正規表現で取り出して print タイトル<br>という風に表示しようと思っています。 よろしくお願いします。 ----下記のページを参考にしています。 http://www.itmedia.co.jp/enterprise/articles/0702/22/news014.html
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
正規表現で処理する前にutf-8をEUCに変換します。 Perlの正規表現はEUC以外では環境次第ですので動作保障が出来ません。 その後、全テキスト読み込み、「<title>」「<link>」タグの付いた行をそれぞれ配列「@T」「@L」に代入という前提で for(my $i=0; $i<=$#T; $i++){ $T[$i] =~ s/<title>(.+)<\/title>/$1/; $L[$i] =~ s/<link>(.+)<\/link>/$1/; print '<a href="'.$L[$i]."'>".$T[$i]."</a><BR>\n"; } で抽出が完了すると思います。 タイトルだけならLINKの部分を取ってください。
その他の回答 (1)
- g_p_
- ベストアンサー率53% (28/52)
こんにちは、 あくまでも参考程度ですが。 以下のスクリプトをutf-8Nで保存して ActivePerlで実行したら、 naoyaのはてなダイアリー 会社にお泊まり と表示されます。 #! /usr/bin/perl use strict; use warnings; use utf8; #>----下記のページを参考にしています。 #リンク先のxmlサンプルをコピペしました。 my $document = << "END_OF_DOCUMENT"; <?xml version="1.0" encoding="utf-8" ?> <rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="ja"> <channel rdf:about="http://d.hatena.ne.jp/naoya/rss"> <title>naoyaのはてなダイアリー</title> <link>http://d.hatena.ne.jp/naoya/</link> <description>naoyaのはてなダイアリー</description> <items> <rdf:Seq> <rdf:li rdf:resource="http://d.hatena.ne.jp/naoya/20050330/1112136510"/> : : </rdf:Seq> </items> </channel> <item rdf:about="http://d.hatena.ne.jp/naoya/20050330/1112136510"> <title>会社にお泊まり</title> <link>http://d.hatena.ne.jp/naoya/20050330/1112136510</link> <description>夜遅かったので会社に泊まることにしました。</description> <dc:date>2005-03-30T07:48:30+09:00</dc:date> </item> END_OF_DOCUMENT my @titles = $document =~ /<title>([^<]*)<\/title>/ig; binmode STDOUT, ":encoding(shiftjis)"; print "$_\n" for @titles; exit; >print タイトル<br> この様子だとCGIだと思いますが、文字コードには 気をつけないといけませんね。 正規表現はあまり得意じゃないので、自信がありません。 あくまで参考程度に。
補足
use utf8;での参考パターンですね。 文字列の取得方法も参考になりました。 ありがとうございます。
お礼
なるほど処理する文字コードの違いがでてくるわけですね。 正規表現でのマッチ方法も理解できました。 ソースを対応させて動かしてみます。 ありがとうございました。