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

时间:2013-03-04 17:40:10

标签: java regex

我有以下Java代码:

String data = "MaxL-450";

if(!data.matches("MaxL\\-*"))
    throw new IllegalArgumentException("Did not match.");

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

2 个答案:

答案 0 :(得分:5)

*表示前一个字符出现零次或多次。你想要"MaxL-[0-9]*"之类的东西,假设你想在短划线后匹配一个数字。

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

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

答案 1 :(得分:1)

如果你在连字符后面找任何字符:

if(!data.matches("MaxL\\-.*"))
    throw new IllegalArgumentException("Did not match.");