<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
このようなリストのページから
マンション名のリンクソースを取り出したいのです。
宜しくお願いします
> テキストエディタの正規表現による置換では無理でしょうか。
> テキストエディタは、秀丸や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
以上
何を使って正規表現検索するかにもよりますが、
<a.*?href.*?>.*?</a>
こんな感じでどうでしょうか。
テキストエディタを想定してました。
以下の回答を見ると、テキストエディタの正規表現による置換では無理でしょうか。
テキストエディタは、秀丸やemeditorを使用しています。
対象ページ例のリンク先なら
リンクの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の使い方です。
sedをDLしてみたのですが、ちょっと私には敷居が高かったです。
上の回答にも返信させていただいたのですが、
テキストエディタの正規表現による置換では無理でしょうか。
テキストエディタは、秀丸やemeditorを使用しています。
(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にソースを貼り付け実行することはできます。
該当部分に一致する正規表現を知りたいのではなく、該当部分のみを抜き出したいのですね。勘違いしていました。
emeditorは使ったことがないので分かりませんが、サクラエディタというテキストエディタならば、置換せずGrep検索の結果を出力するという方法があります。
サクラエディタの場合は、Grep検索(Ctrl+G)で検索条件に
<a.*?href.*?><b>.*?</b></a>
と入れて検索すれば、タグを含むマンション名が出てきます。
該当部分を50件抜き出せているので、少なくともサクラエディタならばこれで出来るかと思います。
emeditorも有名なエディタなので、正規表現による検索→該当部分の出力は出来るのではないでしょうか。メニューを探してみてはどうでしょう。
ありがとうございます、大変たすかりました。
2度も回答いただき、感謝しています。
> テキストエディタの正規表現による置換では無理でしょうか。
> テキストエディタは、秀丸や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
以上
ありがとうございます!
説明を読むだけで、作業が実施できるので、
とっても助かりました!ありがとうございました。
ありがとうございます!
説明を読むだけで、作業が実施できるので、
とっても助かりました!ありがとうございました。