1

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]

したがって、上記のステートメントによって一致が生成される理由を理解するのに完全に途方に暮れています。誰かが解読するのを手伝ってくれませんか。

4

1 に答える 1

3

\uの代わりに使ってみてください\x

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

私が理解している方法は、現在の正規表現が文字列「Test」と一致していることです。これは、基本的に次の範囲で一致しているためです

\x01-\x08
\x0B-\x0C
\x0E-\x1F
\xD8
0
0-\xDF
F
F
\xFF
FE-\xFF
FF

マッチ0-\xDFは幅広い文字にマッチするパターンになりそうです。

于 2013-01-22T20:05:45.210 に答える