java - 我正在尝试匹配日文字符的 Unicode 范围,但它会引发 PatternSyntaxException
问题描述
我正在尝试使用 String 类中的 String.matches(String regex) 方法根据这篇文章为某些日文字符块匹配正则表达式。
但是范围正则表达式[\\x3041-\\x3096]
和属性正则表达式\p{Hiragana}
都会抛出 PatternSyntaxException。我的 IDE 也推荐属性,但似乎没有推荐使用日文字符。
引发此错误的代码是:
c.matches( "[\x3041-\x3096]" )
StackTrace 是:
[\x3041-\x3096]
^
at java.base/java.util.regex.Pattern.error(Pattern.java:2015)
at java.base/java.util.regex.Pattern.range(Pattern.java:2813)
at java.base/java.util.regex.Pattern.clazz(Pattern.java:2701)
at java.base/java.util.regex.Pattern.sequence(Pattern.java:2126)
at java.base/java.util.regex.Pattern.expr(Pattern.java:2056)
at java.base/java.util.regex.Pattern.compile(Pattern.java:1778)
at java.base/java.util.regex.Pattern.<init>(Pattern.java:1427)
at java.base/java.util.regex.Pattern.compile(Pattern.java:1068)
at java.base/java.util.regex.Pattern.matches(Pattern.java:1173)
at java.base/java.lang.String.matches(String.java:2024)
at lib.UIE.TextInput.valid(TextInput.java:49)
解决方案
对于属性正则表达式,请尝试\p{IsHiragana}
改用。Is
前缀用于区分 unicode 脚本和类别与使用In
前缀的块。
更新\x3041
因为@VGR 在原始帖子中提到 \x 与 java 无关,\u3041
应改为使用。
Pattern.matches("\\p{IsHiragana}", "ど"); //true
Pattern.matches("[\u3041-\u3096]", "ど"); //true
推荐阅读
- node.js - @angular/cli@8.3.19 安装后脚本失败
- python - 我如何才能找到数据中存在弯曲/切割的点?
- c# - 如何在 ListBox 在其 ItemsSource 集合更改后更新时显示等待光标?
- python - 使用python每页多个png/pdf
- c# - 循环无法到达预期的端点
- javascript - 如何从localStorage Angular中的数组中删除单个对象
- python - 在 Z3Py 中编码允许集
- ios - 在 iOS 中点击 Google Maps 标记 infoWindow 后如何使表单显示?
- php - 使用 PHP 生成相等的数字减号到加号
- java - 如何测试多线程服务器