精華區beta RegExp 關於我們 聯絡資訊
如題… 話說我目前有遇到一個html檔… 內容很簡單: <div>我是測試行</div> <div>我是美女圖<img src="http//beauty.jpg" /></div> <div>我是<a href="http//yaya.com">無聊的測試</a></div> 想要問一下…有沒有辦法用一次的preg_match_all() 就抓到 [1] => "我是測試行" [2] => "我是美女圖<img src="http:/beauty.jpg" />" [3] => "我是<a href="http:/yaya.com">無聊的測試</a>" 也就是…抓取<div>開頭;最接近的</div>結尾的資料… (暫不考慮巢狀div的問題,即 <div> <div>我是小巢</div> </div> 只會抓到"<div>我是小巢") 我原本用的pattern 是 "/<div>(.*)<\/div>/" 但他會greedy的抓到最長的match... 還是說還有其他方法呢? 先謝謝大家的回答了~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.87.174
lg31cm:(.*?) 07/11 03:40
lg31cm:不過事實上.*?算是很慢的方法 07/11 03:41
lg31cm:不過最好解釋就是了 07/11 03:41
bcse:可以示範一下快的方法嗎? 07/11 09:11
grassboy2:囧a 那這是唯一的方法嗎? 不過還是謝謝一樓的推文~ 07/11 09:27
thitbbeb:不知道你是什麼問題= =,我測你的語法都正確的抓到你要的 07/11 14:30
> -------------------------------------------------------------------------- < 作者: grassboy2 (活力花俏草兒仔政﹞O花俏) 看板: RegExp 標題: Re: [問題] preg_match_all抓取所有<div>....</div> 時間: Sat Jul 11 23:32:48 2009 : 內容很簡單: <div>我是測試行</div> <div>我是美女圖<img src="http//beauty.jpg" /></div> <div>我是<a href="http//yaya.com">無聊的測試</a></div> : 想要問一下…有沒有辦法用一次的preg_match_all() : 就抓到 : [1] => "我是測試行" : [2] => "我是美女圖<img src="http:/beauty.jpg" />" : [3] => "我是<a href="http:/yaya.com">無聊的測試</a>" 耶逗…補充說明~ 我原本用的pattern 是 "/<div>(.*)<\/div>/" 餵上面的內容他會抓到的是 [1] => "我是測試行</div> <div>我是美女圖<img src="http//beauty.jpg" /></div> <div>我是<a href="http//yaya.com">無聊的測試</a>" 也就是說,他抓到的是最長匹配字串… 但這不是我要的><~ 目前我是另外用php split()的方式把</div>截掉,再針對每個<div>去處理 但…應該有更漂亮的方法吧@@~ 例如我pattern中的(.*)可以指定說中間的字串不包含</div>的寫法之類的… 還是說在"/<div>(.*)<\/div>/"的結尾可以加什麼tag之類的? 感謝大家的幫助><~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.87.174
bibo9901:原來那篇的推文就有解法了 07/11 23:51
thitbbeb:= =,我照你原本的語法…沒問題啊…不會抓到<div>啊 07/12 01:04
thitbbeb:preg_match_all("/<div>(.*?)<\/div>/",文字,存放變數) 07/12 01:05
thitbbeb:變數[1][0] 變數[1][1]變數[1][2] 語法沒問題啊= = 07/12 01:05
kornelius:(.*) greedy match , (.*?) non-greedy match 08/07 09:30
> -------------------------------------------------------------------------- < 作者: X700 (X700) 看板: RegExp 標題: Re: [問題] preg_match_all抓取所有<div>....</div> 時間: Sun Jul 12 00:10:34 2009 ※ 引述《grassboy2 (活力花俏草兒仔政﹞O花俏)》之銘言: 我也有問題和這位仁兄相似,但是我想做的就是巢狀時要如何正確抓資料呢? 如下的例子: <div class="test"> <div>我是大巢 <div>我是小巢</div> </div> </div> 希望可以抓到div class="test"內的資料: <div>我是大巢 <div>我是小巢</div> </div> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.161.172.242
thitbbeb:<div\s*class=\"test\">([\W\w]+)<\/div> 07/12 01:08
bcse:我有個小問題,[\W\w]+跟.+有什麼不同? 07/12 08:05
thitbbeb:[\W\w]+是指全部內容,.+是指不包含換行以外的任何字 07/12 13:10
lg31cm:如果要比對巢狀tag,MRE PHP那章有個實際範例 07/12 13:39
lg31cm:php's preg 可以用遞迴的方式比對 07/12 13:39
X700:請問一下,MRE PHP是指? 07/12 20:50
> -------------------------------------------------------------------------- < 作者: kornelius (c9s) 看板: RegExp 標題: Re: [問題] preg_match_all抓取所有<div>....</div> 時間: Sat Jul 25 21:25:45 2009 請用 Perl 的 Web::Scraper 模組 :p http://search.cpan.org/dist/Web-Scraper/lib/Web/Scraper.pm 就可以做到 tree structure 的 parsing 只需要給定 css selector 即可 當然也有 xpath 做 selector 的後端。 ※ 引述《X700 (X700)》之銘言: : ※ 引述《grassboy2 (活力花俏草兒仔政﹞O花俏)》之銘言: : 我也有問題和這位仁兄相似,但是我想做的就是巢狀時要如何正確抓資料呢? : 如下的例子: : <div class="test"> : <div>我是大巢 : <div>我是小巢</div> : </div> : </div> : 希望可以抓到div class="test"內的資料: : <div>我是大巢 : <div>我是小巢</div> : </div> -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 113.61.194.203 ※ 編輯: kornelius 來自: 113.61.194.203 (07/25 21:26)
othree:Perl真是什麼都有XD 07/27 16:07
lg31cm:不過事實上perl的regex用法最為變態XDDDD 07/28 00:47
arrack:perl包山包海 07/30 19:52