0

我有以下 Java 代码:

String data = "MaxL-450";

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

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

4

2 回答 2

5

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

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

编辑:另外,正如戴夫牛顿指出的那样,破折号前面的转义斜线不是必需的,因为破折号不在字符类中。

于 2013-03-04T17:41:30.453 回答
1

如果您正在寻找连字符后的任何字符:

if(!data.matches("MaxL\\-.*"))
    throw new IllegalArgumentException("Did not match.");
于 2013-03-04T17:42:21.073 回答