关于.net:正则表达式解释

Regex Interpretation

我试图从xml中过滤掉无效字符。尽管我已经成功完成了该工作,但是我在此过程中编写了一个正则表达式,这对我来说是违反直觉的。

请考虑以下.Net正则表达式评估:

1
System.Text.RegularExpressions.Regex.Match("Test", @"[\\x01-\\x08\\x0B-\\x0C\\x0E-\\x1F\\xD800-\\xDFFF\\xFFFE-\\xFFFF]+").ToString()

现在我的理解是Regex模式匹配所有无效的xml字符。根据此页面:
http://www.w3.org/TR/REC-xml/#NT-Char

这些是有效字符:

1
#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

据我所知,上述正则表达式模式是剩余的Unicode字符(即无效的xml字符)的集合差异。但是仍然运行上面的语句会产生以下结果:

"测试"

(即整个输入字符串)。我不明白为什么。特别是,正则表达式的这一部分会导致匹配:
\\\\\\\\ xD800-\\\\\\\\ xDFFF

在我看来,这两个组从有效字符中排除了相同的内容:
[#x20-#xD7FF] | [#xE000-#xFFFD]

因此,我完全不理解上面的陈述为什么会产生匹配。有人可以帮我解密吗。


尝试使用\\u代替\\x

1
System.Text.RegularExpressions.Regex.Match("Test", @"[\\x01-\\x08\\x0B-\\x0C\\x0E-\\x1F\\uD800-\\uDFFF\\uFFFE-\\uFFFF]+").ToString();

据我了解,您当前的正则表达式与字符串" Test"匹配,因为它在以下范围内基本匹配

1
2
3
4
5
6
7
8
9
10
11
\\x01-\\x08
\\x0B-\\x0C
\\x0E-\\x1F
\\xD8
0
0-\\xDF
F
F
\\xFF
FE-\\xFF
FF

匹配0-\\xDF可能是与各种字符匹配的模式。