Java:Regex:+;量词不起作用

Java:Regex:+;量词不起作用,java,regex,Java,Regex,所以“XXXXX**”.matches(“[X{9,11}\\\\*{2,3}]”按预期返回false。。。 但是,“XXXXX**”.matches(“[X{9,11}\\\*{2,3}]+”)返回true。我是否正确使用了+量词?(我希望第二个也返回false)[…]匹配字符类中定义的任何字符,因此 [X{9,11}\\\*{2,3}]实际上是指单个字符,即:X、大括号、9、逗号、1、1(是的,您复制了它)、反斜杠或星号 因此,由于字符串中有多个字符需要匹配,因此这种模式将不匹配 当您添加+

所以
“XXXXX**”.matches(“[X{9,11}\\\\*{2,3}]”
按预期返回
false
。。。
但是,
“XXXXX**”.matches(“[X{9,11}\\\*{2,3}]+”)
返回
true
。我是否正确使用了
+
量词?(我希望第二个也返回
false

[…]
匹配字符类中定义的任何字符,因此
[X{9,11}\\\*{2,3}]
实际上是指单个字符,即:X、大括号、9、逗号、1、1(是的,您复制了它)、反斜杠或星号

因此,由于字符串中有多个字符需要匹配,因此这种模式将不匹配

当您添加
+
时,它意味着将字符串与1个或多个[X或星号或..]匹配,因此它将匹配

我相信你真正想做的是使用一个团队

因此正则表达式看起来像
(X{9,11}\*{2,3}])+

匹配正确和错误

(x和*s)的整个过程必须至少发生一次(+)


不涉及任何字符组,无需使用“[]”。

大多数符号在方括号中失去了意义。可供例外的是
]
-
,有时是
^
,但肯定不是
+
[]
是一个字符类,匹配括号之间列出的任何一个字符。重复项将被忽略。因此,
[X{9,11}\*{2,3}]
[,{}\*1239X]
相同,即匹配逗号、开括号、闭括号、星形、1、2、3、9或X。您认为
[]
有什么作用?如果您没有字符类,
X{9,11}*{2,3}
将在9和11之间匹配,然后是2或3颗星。如果你想重复这个分组,你首先用
(?:)
包装,使它成为一个非捕获组,然后添加
+
,即
(?:X{9,11}\*{2,3})+
哦,把额头猛击在桌子上,我不敢相信我没抓到:(谢谢!
"XXXXXXXXX**".matches("(X{9,11}\\*{2,3})+")
"XXXXXXXX**".matches("(X{9,11}\\*{2,3})+")