我正在寻找一个正则表达式,以从一组XML文档中删除以下doctype声明:
这是stackoverflow等平台上非常常见的问题,但是所有的答案都无法处理两种情况。
我的天真想法是
完整的测试用例:
<!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">
这是stackoverflow等平台上非常常见的问题,但是所有的答案都无法处理两种情况。
我的天真想法是
<!DOCTYPE((.|\n|\r)*?)(\"|])>
可以正确匹配第二种情况,但却在第一种情况下失败(它在第一个">
停止并留下了%mathen; ]>
未匹配)。如果我尝试让正则表达式更贪婪一点,它将尝试消耗整个文档。完整的测试用例:
<!DOCTYPE[^>[]*(\[[^]]*\])?>
进行小改动似乎能够按预期工作,所以除非有更好的答案,否则我会接受这个 :) - The Fiddler