Java 正则表达式模式?字符和CharacterSequence包含unicode字符
我正在尝试创建正则表达式,以匹配带有a-z字符的字符串和我在下面编写的代码中使用的字符: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
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,它工作正常。