ホームページのソースからリンクのソース

<a href="http://www.yahoo.co.jp/">ヤフー</a>
だけを取り出す正規表現を教えてください。

※リンク抽出ツール等の回答はいりません。宜しくお願いします。

対象ページ例)
http://www.jj-navi.com/shuto/FJ010S90030.do?JJ_GA=tiles.FJ010A01A00002&JJ_TA=FJ010J01003_02&AR=030&SE=010&TB=A00&HD=1&PJF=0&CNT=50&SCF=0&P=33&KB=1&KT=9999999&KM=1&KM=0&MB=0&MT=9999999&ET=&N=&GH=0&kensaku.x=51&kensaku.y=14

このようなリストのページから
マンション名のリンクソースを取り出したいのです。

宜しくお願いします

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/04/26 00:31:31
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:kmon No.5

回答回数27ベストアンサー獲得回数5

ポイント60pt

> テキストエディタの正規表現による置換では無理でしょうか。

> テキストエディタは、秀丸やemeditorを使用しています。


置換とgrepの実行を複数回行うことで可能ではあります。

当方、秀丸もemeditorも使用していませんが、web上の情報から挑戦してみます。

秀丸で実行した場合です。(emeditorにもgrepが呼び出せるならば同様の方法がとれると思います)


(1) 対象のソースファイルを秀丸に読み込む。

(2) 置換を実行する。

  注:正規表現はONにしておくこと。

    検索:<a .*href="([^"]*)".*><b>(.*)<\/b><\/a>
    置換:¥n###<a href=\"http://www.jj-navi.com¥1\">¥2</a>¥n

 *後でgrepに引っ掛けるため、先頭に「###」を加え、さらに独立した行にするため、先頭と最後に改行(「¥n」)を入れています。

(3)「grepの実行」を行う。

    検索する文字列 :^###
    検索するファイル:(現在の内容)

(4) grepの結果に対して、置換を実行する。

    検索:^[^:]+: ###
    置換:

参考にした情報(以下)も読みながら試してみてください。

(メールアドレスを抜き出す ー 逆引き秀丸の正規表現で置換サンプル集)

http://pc.dearie.jp/hidemaru/replace/14.html

以上

id:motoi20

ありがとうございます!

説明を読むだけで、作業が実施できるので、

とっても助かりました!ありがとうございました。

2008/04/26 00:31:12

その他の回答4件)

id:destin No.1

回答回数5ベストアンサー獲得回数0

ポイント10pt

何を使って正規表現検索するかにもよりますが、

<a.*?href.*?>.*?</a>

こんな感じでどうでしょうか。

id:motoi20

テキストエディタを想定してました。

以下の回答を見ると、テキストエディタの正規表現による置換では無理でしょうか。

テキストエディタは、秀丸やemeditorを使用しています。

2008/04/25 16:22:48
id:iww No.2

回答回数101ベストアンサー獲得回数10

ポイント10pt

対象ページ例のリンク先なら

リンクのURIはだいたい

href="<b>(.*)</b>"

みたいな感じで、物件の名前は

false;"><b>(.*)</b>

で取得できるっぽいので、sedで動くように書いたらこんな感じでした。

$ cat hoge.txt | sed -n "s/^.*href=\"\(.*\)\" .*false;\"><b>\(.*\)<\/b>.*$/<a href=\"http:\/\/www.jj-navi.com\\1\">\\2<\/a>/p"

あとは物に合わせて微調整ですが、なんとかなると思います。

リンク先はsedの使い方です。

http://www.linux.or.jp/JM/html/GNU_sed/man1/sed.1.html

id:motoi20

sedをDLしてみたのですが、ちょっと私には敷居が高かったです。

上の回答にも返信させていただいたのですが、

テキストエディタの正規表現による置換では無理でしょうか。

テキストエディタは、秀丸やemeditorを使用しています。

2008/04/25 16:22:41
id:kmon No.3

回答回数27ベストアンサー獲得回数5

ポイント10pt

(1) やや一般的な表現

アンカータグには、「href」以外にも複数の属性が指定される場合があるので、それらとごっちゃにならないよう注意する必要があります。

(例えば、「class="..."」、「onclick="..."」など)

 正規表現(1): <a .*href="([^"]*)".*>(.*)</a>

なお、前提条件として、(a)1行にアンカーは1つのみで途中に改行が入らないこと、(c)文字列の開始・終了記号は「"」、を仮定しています。


(2) もう少し踏み込んだ表現

 (1)の表現だと、リンク情報全般にマッチングしてしまうので、もう少し情報を加えて、絞り込みをしてみます。ちょうどマンション名は、ボールド指定されているので、以下のようにします。

 正規表現(2): <a .*href="([^"]*)".*><b>(.*)</b></a>

後は、正規表現にマッチングするパターンだけを取り出すプログラムを書けばOKということになります。rubyで書いたものを以下に示します。注意点としては、マッチングで抽出されたリンク情報は、相対アドレスとなっていることです。

open(ARGV[0]) {|file|
  while l = file.gets
    if /<a .*href="([^"]*)".*><b>(.*)<\/b><\/a>/ =~ l
       puts "<a href=\"http://www.jj-navi.com#{$1}\">#{$2}</a>"
    end
  end
}

whileループの中身が本質となるところで、ソースを1行ずつ読み込んで、正規表現にマッチングするかどうか判定し、成功した場合リンク情報を書き出しています。

id:motoi20

とても詳しく説明していただき、とてもありがたいのですが、

当方、プログラムの知識が少しあるくらいで、rubyなどはとても使えません。

(しっかりと、質問に書くべきでしたね。)

上の回答にも返信させていただいたのですが、

テキストエディタの正規表現による置換では無理でしょうか。

テキストエディタは、秀丸やemeditorを使用しています。

もしくはVBAにソースを貼り付け実行することはできます。

2008/04/25 16:22:38
id:destin No.4

回答回数5ベストアンサー獲得回数0

ポイント50pt

該当部分に一致する正規表現を知りたいのではなく、該当部分のみを抜き出したいのですね。勘違いしていました。

emeditorは使ったことがないので分かりませんが、サクラエディタというテキストエディタならば、置換せずGrep検索の結果を出力するという方法があります。

サクラエディタの場合は、Grep検索(Ctrl+G)で検索条件に

<a.*?href.*?><b>.*?</b></a>

と入れて検索すれば、タグを含むマンション名が出てきます。


該当部分を50件抜き出せているので、少なくともサクラエディタならばこれで出来るかと思います。

emeditorも有名なエディタなので、正規表現による検索→該当部分の出力は出来るのではないでしょうか。メニューを探してみてはどうでしょう。

id:motoi20

ありがとうございます、大変たすかりました。

2度も回答いただき、感謝しています。

2008/04/26 00:26:13
id:kmon No.5

回答回数27ベストアンサー獲得回数5ここでベストアンサー

ポイント60pt

> テキストエディタの正規表現による置換では無理でしょうか。

> テキストエディタは、秀丸やemeditorを使用しています。


置換とgrepの実行を複数回行うことで可能ではあります。

当方、秀丸もemeditorも使用していませんが、web上の情報から挑戦してみます。

秀丸で実行した場合です。(emeditorにもgrepが呼び出せるならば同様の方法がとれると思います)


(1) 対象のソースファイルを秀丸に読み込む。

(2) 置換を実行する。

  注:正規表現はONにしておくこと。

    検索:<a .*href="([^"]*)".*><b>(.*)<\/b><\/a>
    置換:¥n###<a href=\"http://www.jj-navi.com¥1\">¥2</a>¥n

 *後でgrepに引っ掛けるため、先頭に「###」を加え、さらに独立した行にするため、先頭と最後に改行(「¥n」)を入れています。

(3)「grepの実行」を行う。

    検索する文字列 :^###
    検索するファイル:(現在の内容)

(4) grepの結果に対して、置換を実行する。

    検索:^[^:]+: ###
    置換:

参考にした情報(以下)も読みながら試してみてください。

(メールアドレスを抜き出す ー 逆引き秀丸の正規表現で置換サンプル集)

http://pc.dearie.jp/hidemaru/replace/14.html

以上

id:motoi20

ありがとうございます!

説明を読むだけで、作業が実施できるので、

とっても助かりました!ありがとうございました。

2008/04/26 00:31:12

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません