Java 正则表达式模式?字符和CharacterSequence包含unicode字符

Java 正则表达式模式?字符和CharacterSequence包含unicode字符,java,regex,Java,Regex,我正在尝试创建正则表达式,以匹配带有a-z字符的字符串和我在下面编写的代码中使用的字符: Pattern pattern = Pattern.compile("[a-z\\?]*"); System.out.println(pattern.matcher("*").matches()); System.out.println(pattern.matcher("a").matches()); System.out.println(pattern.matcher("?").matches()); S

我正在尝试创建正则表达式,以匹配带有a-z字符的字符串和我在下面编写的代码中使用的字符:

Pattern pattern = Pattern.compile("[a-z\\?]*");
System.out.println(pattern.matcher("*").matches());
System.out.println(pattern.matcher("a").matches());
System.out.println(pattern.matcher("?").matches());
System.out.println(pattern.matcher("汉").matches());
并获得以下输出:

false
true
true
true

我希望定义的模式与“”不匹配汉" 返回false,但正如您所看到的,返回true。有人能解释原因吗?

我刚刚尝试过,我正确地得到了false true false。顺便说一句,没有必要在括号内转义“?”。这样就可以了:

            Pattern pattern = Pattern.compile("[a-z?]*");
    System.out.println(pattern.matcher("*").matches());
    System.out.println(pattern.matcher("a").matches());
    System.out.println(pattern.matcher("?").matches());
    System.out.println(pattern.matcher("汉").matches());

我刚刚尝试过,我正确地得到了false。顺便说一句,没有必要在括号内转义“?”。这只需要:

            Pattern pattern = Pattern.compile("[a-z?]*");
    System.out.println(pattern.matcher("*").matches());
    System.out.println(pattern.matcher("a").matches());
    System.out.println(pattern.matcher("?").matches());
    System.out.println(pattern.matcher("汉").matches());

您确定编辑器以正确的编码保存文件吗?
我尝试将您的测试文件保存为UTF-8或UTF-16,两种情况下都返回我:false、true、true、false。

您确定编辑器以正确的编码保存文件吗?
我尝试将您的测试文件保存为UTF-8或UTF-16,两种情况下都会返回我:false、true、true、false。

非常感谢,我将文件保存为UTF-8,它工作正常。非常感谢,我将文件保存为UTF-8,它工作正常。