【お題】NEW演歌

以前の質問
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1725502
を参考にライブドアのブログにトラックバックされたブログのURLを取得するプログラムを、
以下のように作成しました。

class GetTBAddrLivedoor {

Pattern trackBack = Pattern.compile("<a target=\"_blank\" href=\"(http://.+)\" class=\"posttitle\">");
while((aLine = reader.readLine())!=null){
// if(aLine.indexOf("tb_tab")>=0){
if(aLine.indexOf("<a name=\"trackback\">") >=0){
flag=true;
} else {
if(flag && aLine.indexOf("<a name=\"comments\">")>=0)


しかし、ライブドアでは、一度リニューアルをしまして、
それが原因でリニューアル前後のブログでは、HTMLの構造が変わり、
トラックバック先のURLの記述方法が異なるようになってしまっため、
URLを取得できないものもありました。

リニューアル後の新しいブログは、
<a target="_blank" href="http://blog.livedoor.jp/example/archives/500.html" class="posttitle">

リニューアル前の古いブログは、
<a class="atrackback-post" target="_blank" href="http://yaplog.jp/example/archive/178">
という記述になっています。

そこで、一度の処理で、リニューアル後と前のブログに対してトラックバックURLを取得させる、
新しいブログの場合には、
Pattern trackBack = Pattern.compile("<a target=\"_blank\" href=\"(http://.+)\" class=\"posttitle\">");
古いブログには、
Pattern trackBack = Pattern.compile("<a class=\"atrackback-post\" target=\"_blank\" href=\"(http://.+)\">");
このようにして、全てのライブドアのブログに対応できるプログラムにするには、
プログラムをどのように改正すればよいでしょうか?

よろしくお願いします。

A 回答 (3件)

>実行結果がnullになってしまいます。


それは、多分、
>m.group(1)+",";
がnullになるという意味ですよね?
実際に試してないのですが、
m.group(N)のNは、部分文字列としてパターンで()で囲まれた部分の位置を表しています。
なので、
前のパターンでマッチした場合
m.group(1)で、
後ろのパターンでマッチした場合
m.group(2)で、
取り出します。
m.find()でマッチしたということは既にわかっているので、
m.group(1)がnullの時は、m.group(2)を使うというようにすればいいかと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

無事URLを取得できました。

分かりやすい説明ありがとうございました。

お礼日時:2005/11/07 00:47

"パターン"|"パターン"


ではなくて
"パターン|パターン"
    • good
    • 0
この回答へのお礼

何度もすみません。

一応、ご指摘のように改正してプログラムを実行したのですが、
プログラムは動くのですが、
条件の後者の場合のときは、実行結果がnullとなってしましました。
例えば、

"パターン1|パターン2"

としたとき、パターン2の場合は実行結果がnullになってしまいます。

条件を入れ替える、つまり
"パターン2|パターン1"
にするとURLを表示してくれます。

解決方法をお願いします。

ちなみにリニューアル後のブログの例として以下を
http://blog.livedoor.jp/takapon_ceo/archives/500 …
リニューアル前のブログとして以下を試しました。
http://blog.livedoor.jp/kuroemon21/archives/5017 …

お礼日時:2005/11/04 23:45

正規表現のパターン指定で、


パターン1|パターン2
のように指定できます。
どっちかがマッチするのであればそれでいけると思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

以下のように改正したのですが、

Pattern trackBack = Pattern.compile("<a class=\"atrackback-post\" target=\"_blank\" href=\"(http://.+)\">"|"<a target=\"_blank\" href=\"(http://.+)\" class=\"posttitle\">");

エラーとして

GetTBAddrLivedoor.java:15: 演算子 | は java.lang.String,java.lang.String に適用
できません。
Pattern trackBack = Pattern.compile("<a class=\"atrackback-post\" target=\"_blan
k\" href=\"(http://.+)\">"|"<a target=\"_blank\" href=\"(http://.+)\" class=\"po
sttitle\">");

となりました。

正規表現のパターン指定が間違っているのでしょうか?

お願いします。

お礼日時:2005/11/03 15:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報