xml から無効な文字を除外しようとしていました。私はそれを成功させましたが、プロセス中に直観に反する正規表現を書きました。
次の .Net regex 評価を検討してください。
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
そして、私には、これらの 2 つのグループによって有効な文字から同じものが除外されているように見えます: [#x20-#xD7FF] | [#xE000-#xFFFD]
したがって、上記のステートメントによって一致が生成される理由を理解するのに完全に途方に暮れています。誰かが解読するのを手伝ってくれませんか。