RegExp 板


LINE

※ 引述《DongFeng (Little Five)》之銘言: : 謝謝各位前輩的回答, 前陣子比較忙沒有時間上來回覆感謝各位 : 特別謝謝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就停止並回傳成功, 不知道這樣解讀對不對 RegExp是不會提前回傳成功的 RegExp的行為上必須整段表達式全跑完亦或字串結束還不成功才會結束匹配 抓 <table...> 的部分其實 *+ 跟 + 沒太大差異 不過後面就比較有差異了 這段表達式主要是為了效率而寫成這樣 *+跟+的差異的話 拿/ab*b/和/ab*+b/來匹配abbbb差異就很明顯了 (也比較好說明XD) /ab*b/ => ab*b \/ 開始匹配 a ab abb abbb abbbb <- 找不到 b* => backtrack abbb <- b* 匹配結束 往下繼續 abbbb <- 找到b 全部匹配結束 匹配成功 /ab*+b/ => ab*+b \/ 開始匹配 a ab abb abbb abbbb <- 找不到 b*+ 匹配結束 往下繼續 abbbb <- 字串結束 全部匹配結束 匹配失敗 主要差異在於一般狀況會試著倒回去讓後方能夠匹配 而如果用+結尾的則不進行這個行為 : ----------------------------------------------------------------------------- : 後來在表達式的使用上我又遇到了其他的問題, 如前所述前面的表達式是匹配不含tabel : 的tabel, 但在某些網頁上會遇到下面的狀況 : <table> : <tr> : <td> : <table>...</table> : 內文... : </td> : </tr> : </table> : 使用同樣的表達式去匹配的話會抓出最裡頭的table但卻抓不出內文, 後來我在版上爬文 : 後用了另一段表達式: /<table[^>]*+>((<.+?>.*?<\/.+?>|.)+?)<\/table>/is : 這段表達式可以完整的抓出最外層table以及內容(含裏table) 這段用了好多non-greedy 效率差了不少www (雖然通常都無感啦XD) 而且如果遇到的是像Google那種沒半個換行的 這個抓出來的結果還是錯的XD : 但後來我發現這段表達式只有抓出內文中的其中一個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>, 雖然裡頭只是無關緊要的資料, : 但因為有寫[^>]*+的關係一直覺的應該會抓出來才對... 因為抓到第一個<table>...</table>就完成整個RegExp的匹配啦... 要抓第二個的話請從第一個抓完的地方開始再抓一次 : 希望各位前輩能夠再撥空幫小的解答一下, 敘述能力不大好文長還請見諒... 個人會建議你這種需求用DOM操作 或者自己寫個函數來分析&抓取比較直接 不過你第二個能用沒問題也OK 反正一般網頁也都會換行XD --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.216.102
1F:推 s25g5d4:他不是問*+嗎? 以這個例子來說我覺得用*或*+在效能上也 11/05 02:46
2F:→ s25g5d4:是沒差耶.. 11/05 02:46
3F:→ danny8376:啊... 半夜頭腦不清 打錯了XDD 11/05 09:28
4F:→ danny8376:確實我也覺得沒太大差異... 不過總比後面用*?好多吧XD 11/05 09:29
※ 編輯: danny8376 來自: 140.115.216.102 (11/05 09:31)
5F:→ DeathWatch:推 11/05 23:41







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Gossiping站內搜尋

TOP