【发布时间】:2013-01-06 04:01:09
【问题描述】:
我试图从 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]
所以我完全不明白为什么上述语句会产生匹配。谁能帮我解读一下。
【问题讨论】:
-
Don't use regexes to parse XML。有几个解析器。
-
您好,我完全理解。我不是在尝试解析 xml,而是清理我已经拥有的东西。所以让我们不要进入后台,专注于我错误地解释正则表达式模式的地方。
-
@m0skit0 这是个好建议,但 r_honey 提出的问题与解析 xml 无关。
-
r_honey 如果您在没有完整背景的情况下提出这个问题会更好。
-
嗨@KevinBrydon,我想我已经把这个故事讲得够多了,但对于以后的问题肯定会采纳你的建议:)