10 回答

TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊
雖然確實(shí)要求正則表達(dá)式解析任意 HTML就像要求初學(xué)者編寫操作系統(tǒng)一樣,但有時(shí)候解析一組有限的已知 HTML 也是合適的。
如果您有一小組HTML頁面要從中抓取數(shù)據(jù)然后填充到數(shù)據(jù)庫中,則正則表達(dá)式可能正常工作。例如,我最近想獲得澳大利亞聯(lián)邦代表的名稱,政黨和地區(qū),我從議會(huì)的網(wǎng)站上獲取了這些名稱,政黨和地區(qū)。這是一項(xiàng)有限的一次性工作。
正則表達(dá)式對(duì)我來說效果很好,設(shè)置速度非常快。

TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個(gè)贊
我認(rèn)為這里的缺陷是HTML是Chomsky Type 2語法(無上下文語法),RegEx是Chomsky Type 3語法(常規(guī)語法)。由于Type 2語法從根本上比Type 3語法更復(fù)雜(參見Chomsky層次結(jié)構(gòu)),因此在數(shù)學(xué)上不可能使用RegEx解析XML。
但許多人會(huì)嘗試,有些人甚至?xí)暦Q成功 - 但直到其他人發(fā)現(xiàn)錯(cuò)誤并完全搞砸了你。

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

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