关于奇怪的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()中相同的正则表达式,它将给我一个空字符串[]。再次感谢您的即时帮助。