Java 我正在尝试匹配日语字符';Unicode范围,但它抛出一个PatternSyntaxException

Java 我正在尝试匹配日语字符';Unicode范围,但它抛出一个PatternSyntaxException,java,regex,Java,Regex,我正在尝试使用String类中的String.matches(String Regex)方法为某些日语字符块匹配Regex 但是范围regex[\\x3041-\\x3096]和属性regex\p{Hiragana}都抛出一个PatternSyntaxException。 我的IDE也推荐属性,但似乎没有一个日本字符被推荐 引发此错误的代码是: c.matches(“[\x3041-\x3096]”) 堆栈跟踪是: [\x3041-\x3096] ^ at java

我正在尝试使用String类中的String.matches(String Regex)方法为某些日语字符块匹配Regex

但是范围regex
[\\x3041-\\x3096]
和属性regex
\p{Hiragana}
都抛出一个PatternSyntaxException。 我的IDE也推荐属性,但似乎没有一个日本字符被推荐

引发此错误的代码是:

c.matches(“[\x3041-\x3096]”)

堆栈跟踪是:

[\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)
[\x3041-\x3096]
^
位于java.base/java.util.regex.Pattern.error(Pattern.java:2015)
位于java.base/java.util.regex.Pattern.range(Pattern.java:2813)
位于java.base/java.util.regex.Pattern.clazz(Pattern.java:2701)
位于java.base/java.util.regex.Pattern.sequence(Pattern.java:2126)
位于java.base/java.util.regex.Pattern.expr(Pattern.java:2056)
位于java.base/java.util.regex.Pattern.compile(Pattern.java:1778)
位于java.base/java.util.regex.Pattern.(Pattern.java:1427)
位于java.base/java.util.regex.Pattern.compile(Pattern.java:1068)
位于java.base/java.util.regex.Pattern.matches(Pattern.java:1173)
位于java.base/java.lang.String.matches(String.java:2024)
位于lib.UIE.TextInput.valid(TextInput.java:49)

对于属性regex,请尝试改用
\p{IsHiragana}
Is
前缀用于将unicode脚本和类别与使用
In
前缀的块区分开

原始帖子中@VGR提到的
\x3041
的更新\x与java无关,应该改用
\u3041

Pattern.matches(\\p{IsHiragana},“ど"); //符合事实的
Pattern.matches(“[\u3041-\u3096]”,“ど“”;//正确

编辑您的问题,并包含调用
字符串的确切Java源代码。匹配
[\x3041-\x3096]
它没有按照您的想法进行;我建议在中搜索
\x
。您确定这是您的代码吗?
“[\x3041-\x3096]“
将不会在Java中编译。@VGR感谢您的注意。已编辑。在任何情况下,字符范围都不应在连字符周围有空格。
\\x3041
不代表代码点U+3041,它代表三个ASCII字符
0
4
1
。(
\\x30
是U+0030,是ASCII数字零。)所有这些都在中清楚地解释了。没错,谢谢!我在测试过程中没有注意到错误。至于平假名的unicode,我们应该使用\u3041吗?是的。但是,正如我所说,在
-
之前或之后不能有空格。我从中复制了,可能它们与\x?@user10385242不正确。原始帖子中没有任何内容g与Java有关,与Java正则表达式无关。
\x3400
就是这个答案选择表示Unicode码点值的方式。