Edw*_*ang 42 regex unicode pcre
有效的XML字符列表是众所周知的,如规范所定义:
#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
Run Code Online (Sandbox Code Playgroud)
我的问题是,通过使用Unicode常规类别,是否可以为此(或其反向)制作PCRE正则表达式而不实际对代码点进行硬编码.反向可能类似于[\ p {Cc}\p {Cs}\p {Cn}],除了不正确地覆盖换行符和制表符并错过其他一些无效字符.
Jef*_*ood 87
我知道这不是你问题的答案,但在这里有所帮助:
正则表达式匹配有效的 XML字符:
[\u0009\u000a\u000d\u0020-\uD7FF\uE000-\uFFFD]
Run Code Online (Sandbox Code Playgroud)
因此,要从XML中删除无效的字符,您可以执行类似的操作
// 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, "");
}
Run Code Online (Sandbox Code Playgroud)
我有我们的常驻正则表达式/ XML天才,他有4,400多个上升的帖子,检查一下,然后他签了名.
我在java中试过这个并且它有效:
private String filterContent(String content) {
return content.replaceAll("[^\\u0009\\u000a\\u000d\\u0020-\\uD7FF\\uE000-\\uFFFD]", "");
}
Run Code Online (Sandbox Code Playgroud)
谢谢杰夫.