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

ホームページのソースからリンクのソース
<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

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

宜しくお願いします

●質問者: motoi20
●カテゴリ:コンピュータ インターネット
✍キーワード:ソース ホームページ マンション ヤフー リスト
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● destin
●10ポイント

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

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

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

◎質問者からの返答

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

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

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


2 ● いわわ
●10ポイント

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

リンクの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

◎質問者からの返答

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

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

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

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


3 ● kmon
●10ポイント

(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行ずつ読み込んで、正規表現にマッチングするかどうか判定し、成功した場合リンク情報を書き出しています。

◎質問者からの返答

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

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

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

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

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

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

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


4 ● destin
●50ポイント

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

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

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

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

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


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

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

◎質問者からの返答

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

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


5 ● kmon
●60ポイント ベストアンサー

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

> テキストエディタは、秀丸や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

以上

◎質問者からの返答

ありがとうございます!

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

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

関連質問


●質問をもっと探す●



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