Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式-大写字母后跟任何utf-8小写字符_Java_Regex - Fatal编程技术网

Java 正则表达式-大写字母后跟任何utf-8小写字符

Java 正则表达式-大写字母后跟任何utf-8小写字符,java,regex,Java,Regex,我想写一个正则表达式,如果它以IJ开头,后跟utf-8中的任何小写字母,那么它就是有效的 private static String pattern = "^\\u0049\\u004A(\\p{Ll})*"; System.out.println(Pattern.compile(pattern).matcher("IJP").find()); // true 我正在使用这个正则表达式,但它似乎不起作用。对于“IJP”,它不应该匹配,因为P是大写。您的模

我想写一个正则表达式,如果它以IJ开头,后跟utf-8中的任何小写字母,那么它就是有效的

private static String pattern = "^\\u0049\\u004A(\\p{Ll})*";
System.out.println(Pattern.compile(pattern).matcher("IJP").find()); // true

我正在使用这个正则表达式,但它似乎不起作用。对于“IJP”,它不应该匹配,因为P是大写。

您的模式应该是:

final String pattern = "^\\u0049\\u004A\\p{Ll}*$";
请注意结尾处的
$
位置,使其在结尾前有0个或更多小写字符。注意,我已经删除了
\p{Ll}
周围不必要的组

代码演示:

jshell> String pattern = "^\\u0049\\u004A\\p{Ll}*$";
pattern ==> "^\\u0049\\u004A\\p{Ll}*$"

jshell> Pattern.compile(pattern).matcher("IJP").find();
$6 ==> false

\\u0049
是一种相当迟钝的写作方式,你不觉得吗?为什么不。。。写入
模式=“^IJ\\p{Ll}”

但IJP确实匹配。想想看。你要的是I,然后是J,然后是0个或更多的小写字母。就在那里:一个I,一个J,还有0个小写字母


使用
matches()
而不是
find()
(它会问:整个字符串是否与regexp匹配,而不是“是否有一些子字符串匹配”),或者,正如您已经在其中抛出
^
一样,在末尾抛出一个
$
来匹配。

为了只允许它是IJ,我使用了“^IJ\\p{Ll}*$”,您遗漏的只是
$
。使用锚定来确保匹配整个字符串,而不考虑使用的正则表达式方法(
find()
matches()
)。