Java 我正在尝试匹配日语字符';Unicode范围,但它抛出一个PatternSyntaxException
我正在尝试使用String类中的String.matches(String Regex)方法为某些日语字符块匹配Regex 但是范围regexJava 我正在尝试匹配日语字符';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
[\\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码点值的方式。