10 回答

TA貢獻2021條經驗 獲得超8個贊
雖然確實要求正則表達式解析任意 HTML就像要求初學者編寫操作系統一樣,但有時候解析一組有限的已知 HTML 也是合適的。
如果您有一小組HTML頁面要從中抓取數據然后填充到數據庫中,則正則表達式可能正常工作。例如,我最近想獲得澳大利亞聯邦代表的名稱,政黨和地區,我從議會的網站上獲取了這些名稱,政黨和地區。這是一項有限的一次性工作。
正則表達式對我來說效果很好,設置速度非??臁?/p>

TA貢獻1793條經驗 獲得超6個贊
我認為這里的缺陷是HTML是Chomsky Type 2語法(無上下文語法),RegEx是Chomsky Type 3語法(常規語法)。由于Type 2語法從根本上比Type 3語法更復雜(參見Chomsky層次結構),因此在數學上不可能使用RegEx解析XML。
但許多人會嘗試,有些人甚至會聲稱成功 - 但直到其他人發現錯誤并完全搞砸了你。

TA貢獻1802條經驗 獲得超10個贊
不要聽這些家伙。如果你將任務分解成更小的部分,你完全可以使用正則表達式解析無上下文的語法。您可以使用腳本生成正確的模式,該腳本按順序執行以下每個操作:
解決停機問題。
方圓。
計算O(log n)或更少的旅行商問題。如果它不止于此,你將耗盡RAM并且引擎將掛起。
模式將非常大,因此請確保您有一個無損壓縮隨機數據的算法。
幾乎就在那里 - 將整個事物除以零。十分簡單。
我自己還沒完成最后一部分,但我知道我已經接近了。CthulhuRlyehWgahnaglFhtagnException
由于某種原因,它一直在拋出s,所以我要將它移植到VB 6并使用On Error Resume Next
。一旦我調查剛剛在墻上打開的這扇奇怪的門,我就會用代碼更新。嗯。
PS Pierre de Fermat也想出了如何做到這一點,但他寫的邊距不足以代碼。

TA貢獻1836條經驗 獲得超3個贊
這是我使用(?。┢ヅ銱TML標記的正則表達式:
<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+>
它可能不完美,但我通過大量 HTML 運行此代碼。請注意,它甚至會捕獲<a name="badgenerator"">
出現在網絡上的奇怪內容。
我想讓它與自包含的標簽不匹配,你要么想要使用Kobi的負面后衛:
<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+(?<!/\s*)>
或者只是組合,如果沒有。
對于downvoters:這是來自實際產品的工作代碼。我懷疑讀這個頁面的人會得到這樣的印象:在HTML上使用正則表達式是社會可接受的。
警告:我應該注意,在CDATA塊,注釋,腳本和樣式元素存在的情況下,這個正則表達式仍然存在故障。好消息是,你可以擺脫使用正則表達式的人...
- 10 回答
- 0 關注
- 876 瀏覽
添加回答
舉報