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

关于奇怪的Java正则表达式行为的问题,java,regex,Java,Regex,我正在研究一个正则表达式,它可以匹配前导数字和。一串。但它似乎不能正常工作。我使用的正则表达式是 "^[\\.\\d]+" 下面是我的代码: public void testMiscellaneous() throws Exception { System.out.println("~~~~~~~~~~~~~~~~~~~testMiscellaneous~~~~~~~~~~~~~~~~~~~~"); String s1 = ".123 *[DP7_Dog]"; Stri

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

"^[\\.\\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

然而,我希望是真的,真的,真的,假的。正则表达式一定有问题,但我找不到。有人能帮忙吗?谢谢。

问题在于
matches()
坚持匹配整个输入字符串,就好像regexp开头有一个
^
,结尾有一个
$


你最好使用
Matcher.find()
Matcher.lookingAt()
,或者(如果你想像我一样愚蠢和懒惰)简单地在你的模式末尾加上
*

这不会导致匹配失败(参见Carl的答案),但你不必逃避字符类中的点<代码>“[.\\d]”足够了(作为Java字符串)。谢谢,蒂姆。它的工作没有双重逃逸。当你说“字符类”时,它和括号内定义的字符集一样吗?卡尔,非常感谢你的回答。我在正则表达式的末尾附加了.*,它就起作用了。这让我很困惑,因为split()方法匹配了部分输入字符串。因此,如果我在split()中使用与matches()中相同的正则表达式,它将给我一个空字符串[]。再次感谢您的即时帮助。