我有以下Java代码:
String data = "MaxL-450";
if(!data.matches("MaxL\\-*"))
throw new IllegalArgumentException("Did not match.");
当我执行它时,抛出异常,因为显然正则表达式与我的data
字符串不匹配。我的正则表达式有问题还是其他事情发生在这里?提前谢谢。
答案 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.");