我试图从 xml 中过滤掉无效字符。虽然我已经成功地做到了,但我在这个过程中写了一个正则表达式,这对我来说是违反直觉的。
请考虑以下 .Net 正则表达式评估:
System.Text.RegularExpressions.Regex.Match("Test", @"[\x01-\x08\x0B-\x0C\x0E-\x1F\xD800-\xDFFF\xFFFE-\xFFFF]+").ToString()
现在我的理解是正则表达式模式匹配所有无效的 xml 字符。根据此页面: http ://www.w3.org/TR/REC-xml/#NT-Char
这些是有效字符:
#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
据我了解,上面的正则表达式模式是剩余 Unicode 字符(即无效的 xml 字符)的一组差异。然而,仍然运行上面的语句会产生这个结果:
“测试”
(即整个输入字符串)。我无法理解为什么。特别是,这部分正则表达式导致匹配:\xD800-\xDFFF
在我看来,这两组从有效字符中排除了相同的内容:[#x20-#xD7FF] | [#xE000-#xFFFD]
所以我完全不明白为什么上述语句会产生匹配。有人可以帮我破译它。