4
我要尋找一個正則表達式從一組XML文檔的剝離以下DOCTYPE聲明:正則表達式來刪除文檔類型
<!DOCTYPE refentry [ <!ENTITY % mathent SYSTEM "math.ent"> %mathent; ]>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook MathML Module V1.1b1//EN"
"http://www.oasis-open.org/docbook/xml/mathml/1.1CR1/dbmathml.dtd">
這是計算器和其他地方的一個很常見的問題,但沒有一個答案是實際上能夠處理這兩種情況。
我的<!DOCTYPE((.|\n|\r)*?)(\"|])>
幼稚的方法將正確匹配第二種情況,但不能放在了第一位(它停靠在第一">
和葉%mathen; ]>
無法比擬的。)如果我試圖讓正則表達式更貪婪,它試圖消耗整個文件。
完整的測試情況:
如果文檔中有>和其他地方的順序,那麼您的貪婪匹配會匹配得太多。另外,即使它運作起來,貪婪的比賽也必須回溯。最好使用懶惰的比賽。 – ErikE
這也將匹配文件內的註釋(請檢查我的問題中的xml測試文件。)但是,對' [] *(\ [[^]] * \])>的小改動似乎可以作爲預計,所以除非有人有更好的答案,我會接受:) –
@TheFiddler啊,是的,錯過了。更新了答案。 –