保留罗马和非罗马字符

问题描述 投票:0回答:1

我是 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 regex replaceall
1个回答
0
投票

如果我们查看 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}]", "");
© www.soinside.com 2019 - 2024. All rights reserved.