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})+")