Re: [問題] 一段表達式, 希望版友能幫忙解析...
看板RegExp (正規表示式 Regular Expression)作者DongFeng (Little Five)時間11年前 (2013/11/04 22:12)推噓0(0推 0噓 0→)留言0則, 0人參與討論串3/4 (看更多)
謝謝各位前輩的回答, 前陣子比較忙沒有時間上來回覆感謝各位
特別謝謝danny8376前輩, 謝謝您那麼用心回答還特地回信到我信箱>///<
經過danny前輩分階段的講解我已經知道這行表達式是怎麼運作的了
白話的說來就是匹配
<table此處可為非>的任意字串(含空白與無)>
匹配非<(一般來說是空白或無)
匹配非<table、非</table的任意tag(一般來說是<thead/><tbody/><tr/><td/></tfoot/>)
</table>
這整段可以找出頁面中所有不含table的table
但對於*+的部分我還是有點疑惑, 我自己的解讀是[^>]*+是匹配非>的任意字串後再以該
字串作一次以上的驗證,也就是說
<table c>
<table cl>
<table cla>
<table clas>
<table class>
<table class=>
<table class=">
......
<table class="test">
因為任意字元的關係所以匹配到c就停止並回傳成功, 不知道這樣解讀對不對
-----------------------------------------------------------------------------
後來在表達式的使用上我又遇到了其他的問題, 如前所述前面的表達式是匹配不含tabel
的tabel, 但在某些網頁上會遇到下面的狀況
<table>
<tr>
<td>
<table>...</table>
內文...
</td>
</tr>
</table>
使用同樣的表達式去匹配的話會抓出最裡頭的table但卻抓不出內文, 後來我在版上爬文
後用了另一段表達式: /<table[^>]*+>((<.+?>.*?<\/.+?>|.)+?)<\/table>/is
這段表達式可以完整的抓出最外層table以及內容(含裏table)
但後來我發現這段表達式只有抓出內文中的其中一個table, 雖然抓出來的table是我想要
的沒錯但就是疑惑為什麼其他的table沒被抓出來...
隨文附上資料來源:http://www.thsrc.com.tw/tw/TimeTable/SearchResult
其實這是高鐵時刻表查詢系統, POST的所需資料後即可導出相應的時刻表
導出的時刻表內有兩個table, 分別是
<table>...</table>
<table class="word_size">...</table>
沒有抓出來的<table class="word_size">...</table>, 雖然裡頭只是無關緊要的資料,
但因為有寫[^>]*+的關係一直覺的應該會抓出來才對...
希望各位前輩能夠再撥空幫小的解答一下, 敘述能力不大好文長還請見諒...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 175.111.59.235
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 3 之 4 篇):
RegExp 近期熱門文章
PTT數位生活區 即時熱門文章