关于奇怪的Java正则表达式行为的问题

时间:2010-07-29 16:01:00

标签: java regex

我正在研究一个可以匹配前导数字的正则表达式。在一个字符串中。但它似乎无法正常工作。我正在使用的正则表达式是

"^[\\.\\d]+"

以下是我的代码:

public void testMiscellaneous() throws Exception {
    System.out.println("~~~~~~~~~~~~~~~~~~~testMiscellaneous~~~~~~~~~~~~~~~~~~~~");
    String s1 = ".123 *[DP7_Dog]";
    String s2 = ".123";
    String s3 = "1.12.3";
    String s4 = "a1.12.3";
    final String numberRegex = "^[\\.\\d]+";
    System.out.println(s1.matches(numberRegex));
    System.out.println(s2.matches(numberRegex));
    System.out.println(s3.matches(numberRegex));
    System.out.println(s4.matches(numberRegex));
}

输出

false
true
true
false

但是,我希望真实,真实,真实,虚假。正则表达式一定有问题,但我找不到它。有人可以帮忙吗?感谢。

1 个答案:

答案 0 :(得分:2)

问题在于matches()坚持要匹配整个输入字符串,就好像正则表达式的开头是^,最后是$

您可能最好使用Matcher.find()Matcher.lookingAt(),或者(如果您想像我一样愚蠢和懒惰)只需在模式结尾处添加.*