具体的には下のo行目からz+p行目までをスクレイピングしたいです。
正規表現を記述してみたのですが、phpでうまく動作しません。
どのように正規表現を、変更すればいいでしょうか?
---------------------------------------------------------
o、p、x、y、z、は任意の2以上の自然数とします。
「hoge」は任意の文字列とします。
・・・・・・・・
o行目:<span class="i">「hoge」
・・・・・・・・
x行目:<span class="「hoge」">「hoge」</span>
・・・・・・・・
y行目:<span style="「hoge」">「hoge」</span><span class="「hoge」">「hoge」</span>
・・・・・・・・
z行目:<span class="「hoge」">「hoge」
・・・・・・・・
z+1行目:</span>
・・・・・・・・
z+p行目:「hoge」</span>
・・・・・・・・
--------------------------------------------------------
自分が記述した正規表現は以下の通りです。
'{<span class="i">(.*)((<span(.*)</span>)*)(.*)</span>}s'
わかりにくいものになってすいません。
回答をお願いします。
<span class="i">内のspanの個数が決まっているのでしたら、次のようにするとマッチする正規表現になります。
#<span class="i">(.*?</span>){5}#s
<span class="i">の中の要素数が定まっていない場合、別の条件が必要になりますが、質問で提示している部分の直後に何か判定に使えるような記述はないのでしょうか?
あるいは、<span class="i">の中に、他に何か決まった要素はないでしょうか?
何もない場合は正規表現は適さないので、きちんと構造化されたHTMLなのでしたら、XPathを利用した方がいいと思います。
XPathを利用するライブラリもいくつかあるようです。
・PHPでのスクレイピングに役立つライブラリ色々
http://phpspot.org/blog/archives/2008/03/php_94.html
リンク先情報元(PHPでのスクレイピングに役立つライブラリ - (DxD)∞)より
HTMLScraping
HTMLをXML化してDOMやXPathで操作できるクラス。主にHTTP_Request+HTMLParser(XML_HTMLSax3を含む)/Tidy+Cache_Liteという構成で、スクレイピングに必要なものが一通り揃っている。ライセンスはLGPL他。
WebScraper
シンプルな汎用スクレイピングクラス。HTTP_Client+HTMLParser(XML_HTMLSax3を含む)という構成で、XPathで要素を抽出できる。自分好みにカスタマイズするのに最適。ライセンスは修正BSDライセンス他。
回答いただきありがとうございます。
2012/11/21 13:51:51>内のspanの個数が決まっているのでしたら、・・・
この部分ですが、残念ながらspanの個数を決まっていません。
>の中の要素数が定まっていない場合、別の条件が必要になりますが、質
>問で提示している部分の直後に何か判定に使えるような記述はないのでしょうか?
>あるいは、の中に、他に何か決まった要素はないでしょうか?
こういった特定の記述はなく困っていました。
ご提示いただいたURLを参考にがんばってみます。