Java Regex匹配零次或一次

use*_*460 2 java regex string

我正在使用Java中的Regex,我想匹配一个出现0或1个点的字符串..所以我希望任何带有单点或无点的字符串都返回true,带有2个或更多点的字符串返回false.

根据Java Docs:

X?X,曾经或根本没有

所以我有以下内容:

String str = "abc.def";
System.out.println(str.matches(".?"));
Run Code Online (Sandbox Code Playgroud)

我期待str匹配.0或1次,但它打印false.

我的问题:我错过了解释的含义?吗?我该怎么做才能让它匹配0或1次?

Jim*_* T. 5

正确的模式是:

^[^.]*\\.?[^.]*$
Run Code Online (Sandbox Code Playgroud)

首先是任何不是点的字符数,然后可选地一个点后跟任何不是点的字符数.

  • 刚刚意识到可以通过做"^ [^.]*\\.?[^.]*$`来缩短它 (2认同)