[問題] 沒有 End tag的字串擷取問題
看板RegExp (正規表示式 Regular Expression)作者cptl (James)時間9年前 (2015/06/25 17:59)推噓1(1推 0噓 3→)留言4則, 2人參與討論串1/1
/* 聽說註明使用的語言、環境
* 問題有可能較容易被解決...
*/
請教一個問題, 一般在擷取html內容時, 都有明確的起始與結束tag
例如像是 <html>, </html>, <body>, </body>...等
我們可以在正規表示法裡直接指定開始與結束的tag,
例如我們想抓取 <script...> 和 </script> 的內容時,
可以使用下列表示法:
(?s)<script\s.*?</script>
就能正確將<script ...> 和 </script> 的內容正確找到.
但假如我手上的資料並沒有明確的結束tag, 如下所示:
===Section1===
line A
line B
===Section2===
line C
line D
===Section3=======
line E
line F
能知道的是, 當我們遇到一個 "===Section\d====" 開頭的字串時,
就代表是一個新的section起始位置
想請問的是, 我們有什麼辦法能夠擷取出一個section開頭到
下一個section間的全部內容?
我能想到的是利用 lookahead 的(?!...) 來判斷是否己經遇到
下一個section起始位置, 如果遇到下一個section開頭, 就表示
己經抓到這個section的全部內容, 可以停止比對了
只是目前仍然無法試成功, 底下是我用的方法:
測試: (?s)===Section\d===.*?(?!===Section\d===)
=> 失敗, 只能比對出每個section的開頭, 無法抓出各個section的內容
測試: (?s)===Section\d===.*(?!===Section\d===)
=> 失敗: 一口氣比對出全部的內容
測試: ===Section\d===[\w\W]+(?!===Section\d===)
=> 失敗, 一口氣比對出全部的內容
請教是哪邊有問題呢?
是我使用lookahead的方法有錯嗎?
謝謝
測試環境: Windows 7 + Notepad++
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.171.140.117
※ 文章網址: https://www.ptt.cc/bbs/RegExp/M.1435226352.A.F47.html
推
06/25 23:06, , 1F
06/25 23:06, 1F
→
06/25 23:06, , 2F
06/25 23:06, 2F
→
06/25 23:07, , 3F
06/25 23:07, 3F
→
06/26 00:25, , 4F
06/26 00:25, 4F
RegExp 近期熱門文章
PTT數位生活區 即時熱門文章