为什么这个Java正则表达式与我的字符串不匹配?

IAm*_*aja 0 java regex

我有以下Java代码:

String data = "MaxL-450";

if(!data.matches("MaxL\\-*"))
    throw new IllegalArgumentException("Did not match.");
Run Code Online (Sandbox Code Playgroud)

当我执行它时,抛出异常,因为显然正则表达式与我的data字符串不匹配.我的正则表达式有问题还是其他事情发生在这里?提前致谢.

Zut*_*tty 5

*表示前一个字符出现零次或多次.你想要类似的东西"MaxL-[0-9]*",假设你想在破折号后匹配一个数字.

或者你可以使用"MaxL-\\d*".请注意,Java中需要两个斜杠,因为您需要转义斜杠本身.我个人喜欢[0-9]在Java中使用显式字符类(即),因为它更容易阅读,因为你的正则表达式不可避免地变得更长,更复杂.

编辑:另外,正如Dave Newton指出的那样,破折号前面的逃生斜线不是必需的,因为破折号不在角色类中.

  • 您可以使用`\ d`而不是`[0-9]`. (2认同)