• ベストアンサー

正規表現で抜き出した特定の文字列をDBに格納する

外部Webページのソースから正規表現を用いて特定の文字列を抜き出したいと思っています。外部Webページのソースは以下の通りです。 <td>  <div class="s-box left">   <a href="URL"><img src="" alt="" width="" height="" border="" class="book" /></a>   <h3><a href="URL">書名</a></h3>   <h4>著者:文字列<br />定価(税込):500円</h4>  </div>  <div class="s-box center">   <a href="URL"><img src="" alt="" width="" height="" border="" class="book" /></a>   <h3><a href="URL">書名</a></h3>   <h4>著者:文字列<br />定価(税込):710円</h4>  </div>  <div class="s-box right">   <a href="URL"><img src="" alt="" width="" height="" border="" class="book" /></a>   <h3><a href="URL">書名</a></h3>   <h4>著者:文字列<br />定価(税込):730円</h4>  </div> </td> 上記のようなソースからdiv classごとに、 書名 著者:文字列 定価(税込):---円 という具合に抜き出したく思っていまが、正規表現がわからずプログラムが組めません。また、その抜き出した文字列をDB(MySQL)に自動的に格納するためにはどうしたらよいか。どなたかご教授頂けないでしょうか。宜しくお願い致します。

  • PHP
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>div classごとに、  のところが、具体的にどうしたいのかわかりにくいですが 構造が普遍的であればこんな感じで拾えそうですね <? $html=<<<eof <td> <div class="s-box left"> <a href="URL"><img src="" alt="" width="" height="" border="" class="book" /></a> <h3><a href="URL">書名</a></h3> <h4>著者:文字列<br />定価(税込):500円</h4> </div> <div class="s-box center"> <a href="URL"><img src="" alt="" width="" height="" border="" class="book" /></a> <h3><a href="URL">書名</a></h3> <h4>著者:文字列<br />定価(税込):710円</h4> </div> <div class="s-box right"> <a href="URL"><img src="" alt="" width="" height="" border="" class="book" /></a> <h3><a href="URL">書名</a></h3> <h4>著者:文字列<br />定価(税込):730円</h4> </div> </td> eof; $pattern="/<div class=\"(.*?)\".*?>.*?<h3><a .*?>(.*?)<\/a>.*?<\/h3>.*?<h4>(.*?)<br \/>(.*?)<\/h4>.*?<\/div>/mis"; preg_match_all($pattern,$html,$matches,PREG_SET_ORDER); print_r( $matches); ?>

coco218-8
質問者

お礼

replyありがとうございます。 とても参考になりました。別々に抜き出すことができましたので、DBへの格納については、もう少し調べるなりして自力で頑張ってみます。

その他の回答 (1)

回答No.1

http://simplehtmldom.sourceforge.net/manual.htm 正規表現でスクレイピングするのも良いですが、上記URLのようなライブラリもありますので、一度利用してみてはいかがでしょうか。 jQueryのように利用できます。 <?php $html = file_get_html('http://example.com'); $ret = $html->find('div[class=s-box]'); foreach($ret as $child){ //処理 } ?>

coco218-8
質問者

お礼

replyありがとうございます。 上記のようなDOMが存在することを知りませんでした。使ったことがないので、勉強の一環としてそちらも試してみます。使用方法のサンプルまで挙げて頂きありがとうございました。

関連するQ&A

  • 正規表現の文字列否定

    すいません、PHPをたまたま使用しているので、 PHPのカテゴリで質問させていただきますが、 正規表現で特定の文字列の集合を まとめて否定することはできないのでしょうか。 例えば、<p class="hoge"><a href="test.html">aaa</a></p> という部分があって、 hogeのクラスが付いている行のhrefのURIだけ取得したいのですが、 <p class="hoge"">という部分が取り除けません。 イメージ的には[^(<p class=\"hoge\">)]という感じで、 否定できるのかな~と思っていたんですが、 これはできないんですよね。 まとまった文字列を否定することはでいないのでしょうか。 ご教授お願いいたします。

    • ベストアンサー
    • PHP
  • VB6.0の正規表現を使って、文字列を変更する方法は?

    よろしくお願いします。 VB6.0を使っています。 正規表現を使って、文字列を変更したいと思っています。 <DIV class=sub_pane1></DIV> <DIV class=sub_pane2></DIV> <DIV id=sub_pane3></DIV>  ↓↓↓ <DIV></DIV> 上記も文字列の変更のソースを書いたのですがなぜかできません。 つまり、DIVの属性を無くしたいのです。 何が問題なのでしょうか? Dim s As String s = "<DIV class=sub_pane1></DIV>" s = Replace(s, "<DIV*>", "")

  • ネスケとIEを同じ表示にしたい

    文字をborderで囲ったものを二列に6つずつ並べて、サイトのメニューとして 使っています。 HTMLを以下のように記し、↓ <div> <span class="menu"><a href="#">AAA</a></span> <span class="menu"><a href="#">BBB</a></span> …… </div> <div> <span class="menu"><a href="#">CCC</a></span> <span class="menu"><a href="#">DDD</a></span> …… </div> これをcssで以下のようにしているのですが、ネスケで上手く表示されません 。 .menu { font-size: 13px; text-align: center; margin: 2px; border:1px solid gray; width: 97px; height: 15px; color: #808080; } どうも、marginとwidth、heightが反映されていないようなのですが、これを ネスケでも反映させるにはどうしたらいいでしょうか。 宜しくお願いします。

    • ベストアンサー
    • HTML
  • 特定文字列の取り出し方 複雑な正規表現

    お世話中になります。 特定文字列の取り出し方が分かりません。 たとえば、下記のような文字列があります。 == $contents ======================================== <img alt="Image813.jpg" class="pict" height="320" src="http://xyzxyz.com/20111101_123.jpg" width="240" /><br /> もう後2ヶ月です!!<br /> 早いですね。<br /> <br /> 写真はココちゃんです!<br /> <img alt="DSC_0052.JPG" class="pict" height="320" src="http://xyzxyz.com/20111101_456.jpg" width="240" /><br /> 今年の夏から発売し、たくさんのお客様に<br /> 食べていただいているソフトクリーム。<br /> <br /> 今のところ人気ランキングはこんな感じです。<br /> ちなみにソフトクリームは真冬の最高気温が5度の日でも<br /> 販売し続ける予定です!<br /> ================================================== この$contents という文字列から 「http://xyzxyz.com/20111101_123.jpg」 「http://xyzxyz.com/20111102_456.jpg」 を取り出し、ぞれぞれ配列に入れる場合の 正規表現はどのように記述すればいいですか? 下記の文字列を $contents として、 正規表現を $pattern 結果を $matches とします。 お忙しいところ 申し訳ありませんが、 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP正規表現の特定文字列を省く場合

    PHPを仕事で少し使用しております、Webデザイナーです。知識が少なく、正規表現での疑問がどうしても解決出来ずに困っております。限界を感じ質問させていただきました。どうぞよろしくお願いいたします。 PHPでURLにリンクを設定しております。文字列の中の「http」などで始まるURLにリンクを付けることは問題ないのですが、その中で「[nolink]http」といった特定の文字列が頭についているURLのみリンクを付けないようにしたいと考えております。ソースは以下の通りですが、上手くいきません。?!の個所を色々変えてみましたが、正しく認識されないorエラーが出てしまいます。 $body = preg_replace("/((?!\[nolink\])(https?|ftp)(:\/\/[A-Za-z0-9\+\$\;\?\.%,!#~\*\/:@&=_\-]+)/", "<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>", $body); そもそもの考え方が間違っているのか、中途半端な知識のため解決の糸口がつかめません。どうぞご教授頂けますようお願いいたします。

    • 締切済み
    • PHP
  • CSSで表示が、、、

    写真を並べているページなのですが、 firefox と IE での縦のスペースの空き具合が異なってしまいます。 IEで見ると、firefoxよりも大きく立て幅が空いてしまい 揃ってくれません。 回避策をググって色々試してみたのですが 上手くいきませんorz ひょっとしたらコード的にどこかおかしいのかも しれないのですが、、、どなたか助言をお願いしますm(_ _)m -- html-- <div class="navi" > <div class="pic2"><a href="01.html"><img src="pic/1mini.jpg" width="200" height="150" border="0" /></a></div> <div class="pic2"><a href="02.html"><img src="pic/2mini.jpg" width="200" height="150" border="0" /></a></div> <div class="pic2"><a href="03.html"><img src="pic/3mini.jpg" width="200" height="147" border="0" /></a></div> <div class="pic2"><a href="04.html"><img src="pic/4mini.jpg" width="200" height="151" border="0" /></a></div> </div><!--navi--> -- 外部CSS -- .pic2 { float: left; margin-left:30px; margin-top:20px; } .navi { clear:both; margin-top:40px; }

    • ベストアンサー
    • CSS
  • PHPでaタグ内のリンクの末尾に文字列を追加したい

    PHPでaタグ内のリンクの末尾に文字列を追加したいのですがやり方がわかず困っております。 やりたいことは以下のようなことです <a class="url" href="http://www.abc.com">○○</> や <a href="http://www.abc.com">○○</> となっているhrefのリンクの末尾に"AAA"などの文字列を付加したいです <a class="url" href="http://www.abc.com/AAA">○○</> や <a href="http://www.abc.com/AAA">○○</> ご存じの方がいらっしゃいましたらご教授ください。 よろしくお願いします

    • 締切済み
    • PHP
  • 正規表現を使った文字列の切り出し

    こんにちは ver_51 と言います. 決まったパターンの文字列から正規表現を使って抽出する方法で悩んでいます. 文字列のパターンは以下の通りです. 任意の文字列は.*で表しています. String line = ".*<a href=".*" .*">抽出したい箇所1</a>.*<a href=".*" .*">抽出したい箇所2</a>.*以下同じように続く"; String tray = new tray[100]; 実現したいことは正規表現を使って抽出したい箇所がある限り,trayに順番通りにいれるというものです. この場合だと tray[0]="抽出したい箇所1"; tray[1]="抽出したい箇所2"; ・ ・ ・ と入ってほしいです. お手数ですが,どうぞ宜しくお願い致します.

    • ベストアンサー
    • Java
  • 正規表現による文字列の抽出

    $data = 'a b c<a href="x/y/z/hoge.jpg">hoge.jpg </a> …<A HREF = "aa/b/c/hoga.jpg">hoga.jpg</A>…'; 上記の文字列から正規表現で 『x/y/z/hoge.jpg』と『aa/b/c/hoga.jpg』を取り出して配列に格納しようと思っているのですがうまくいきません。 条件は 1.『<a href="』(大文字の場合、またはイコールの前後に半角スペースが含まれる場合もあります。)と『">』に囲まれています。 2.文字列中に何回登場するかは決まっておりません。 3.取り出す文字列の長さはきまっておりません。 以下のように書いてみたのですが…。書き方がわかりません。 どなたかご教授いただけないでしょうか。 よろしくお願いいたします。 while ($data =~ /<a\s[hH][rR][eE][fF].=.\".*?">/g){ push(@arr, $&); } foreach(@arr){print $_,"\n";}

    • ベストアンサー
    • Perl
  • 正規表現でタグの一部を削除したい

    Dreamweaverの検索および置換で正規表現を使用して、サイト内で使用されている<a>タグの中の「title=""」を削除したいです。どうぞよろしくお願いします。 例としては下記のような感じです。 【修正前】 <a title="ここは文字列が入っています" href="index.html" class="link">リンク文字</a> 【修正後】 <a href="index.html" class="link">リンク文字</a> 「title=""」の「””」に入っている文字列は同じ文字もありますが、基本的にすべて違います。 また、例では<a>タグの中に「href」「class」が入っていますが、リンク先が違ったり、class名が違ったり、「id」が入っていることもあります。

    • ベストアンサー
    • CSS

専門家に質問してみよう