有效的 XML 字符列表是众所周知的,正如规范所定义的:
#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
我的问题是是否可以通过使用 Unicode 通用类别来为此(或其逆)创建 PCRE 正则表达式,而无需实际对代码点进行硬编码。逆可能类似于 [\p{Cc}\p{Cs}\p{Cn}],只不过不正确地覆盖了换行符和制表符并错过了一些其他无效字符。
我知道这并不完全是您问题的答案,但在这里提供它会很有帮助:
正则表达式来匹配validXML 字符:
[\u0009\u000a\u000d\u0020-\uD7FF\uE000-\uFFFD]
所以要删除invalidXML 中的字符,你会做类似的事情
// filters control characters but allows only properly-formed surrogate sequences
private static Regex _invalidXMLChars = new Regex(
@"(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x9F\uFEFF\uFFFE\uFFFF]",
RegexOptions.Compiled);
/// <summary>
/// removes any unusual unicode characters that can't be encoded into XML
/// </summary>
public static string RemoveInvalidXMLChars(string text)
{
if (string.IsNullOrEmpty(text)) return "";
return _invalidXMLChars.Replace(text, "");
}
我有我们常驻的正则表达式/XML 天才,他是 4,400 多个点赞帖子中的一员 https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454,检查一下,然后他就签字了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)