用于匹配Unicode模式的正则表达式

时间:2016-04-27 12:32:11

标签: java regex

我正在尝试在上传时验证文件的内容,并且我坚持使用Unicode编码。我不想找到不在ASCII范围内的Unicode特殊字符。我试图找到文件的内容是否包含至少一个Unicode模式,例如\ u0046。

例如,我排除了包含“script”字的任何文件,但是如果该文件包含用Unicode编写的这个单词怎么办?当然,Java在读取内容时将其解码为普通字符串,但是如果我不能依赖它呢?

因此,就我在互联网上搜索而言,我看到的Unicode字符写得像\ u0046,或者像U + 0046。基于此,我写了以下正则表达式:

(\\u|U\+)....

这意味着\ u或U +后跟四个字符。这个模式完成了我想要的,但我想知道是否还有其他方法来编写Unicode字符。它总是\ u或U +?在\ u或U +之后可以多于或少于4个字符吗?

由于

1 个答案:

答案 0 :(得分:2)

符号U + 任意数字的十六进制数属于Unicode,在代码中的任何位置都不起作用。在java源代码中,* .properties \u后跟四个十六进制数字是Unicode的UTF-16编码,自动解析。

搜索该模式的模式:

"\\\\u[0-9A-Fa-f]{4}"

或者String.contains on:

"\\u"

对于完整的UTF-32范围,除了Java \Uxxxxxx之外的其他语言(六个十六进制字符)是可能的。不幸的是,Java 8并不是这样。