我是 Java 新手。当前使用 ReplaceAll() 方法来保留 Unicode 范围内的罗马字符和非罗马字符,这些字符属于 XML 1.0 规范的有效范围。
在java-regex-tester上使用Java的replaceAll()方法测试下面的正则表达式模式,它似乎从下面突出显示的字符串中删除了所有非罗马字符,包括空格和制表符。
正则表达式模式
[^\\x09\\x0A\\x0D\\x20-\\xD7FF\\xE000-\\xFFFD\\x10000-\\x10FFFF]
测试文本:
英语 - 日语: 私达が自身の目を通して 见ている他者の姿势は、全てが真実といえるのだろうか。韩语 ould름 Been 뭐에요 波兰语 Zażółć gęślą jaźń- &, <, >, ', ” })>
我最初相信这个正则表达式模式会匹配任何不是有效 XML 字符的字符;然而,它似乎排除了给定字符串中的几乎所有内容。我认为应该允许字符 目 (0x76EE) 落在 x20-\xD7FF 的范围内,但似乎已被删除,但允许
&, <, >, ', "
和 ]]>
我不确定我做错了什么。任何指导将不胜感激。
如果我们查看 Java 中正则表达式的文档,我们会看到以下内容:
\x
hh 十六进制值的字符 0x
hh
仅使用 \x
之后的前两个十六进制数字。
\x
只能表示 0x00 和 0xff(含)之间的代码点。
正如您在下面所看到的,您可以使用
\u
表示任何代码点,直到(包括 0xffff),因为 \u
允许四个十六进制数字。
要引用所有代码点,您需要
\x{…}
:
xml = xml.replaceAll("[^\\x09\\x0A\\x0D\\x20-\\x{D7FF}\\x{E000}-\\x{FFFD}\\x{10000}-\\x{10FFFF}]", "");