我想匹配任何可以由一个或多个点分隔的字母数字:
- 伯蒂
- 伯特.123
- 伯特.01.03.27
但不是 :
- .bert(点不分离)
- 伯特123。(点不分离)
- bert...123(点的多次连续出现)
现在我有了这个^[^\\.][\w\.]+?[^\\.]$
,但仍然无法处理点字符的多次连续出现。
你想要的是^\w++(\.\w++)*$
至少一个字母数字字符,后跟任意数量的组,只有一个点,后跟至少一个字母数字字符。
这应该有效:
^(\w+\.)*\w+$
如果你愿意,你可以\w
用更严格的东西代替(例如,[a-z]
)
我认为这应该有效
boolean ok = !str.matches(".*[^0-9a-zA-Z.].*|\\..*|.*\\.|.*\\.{2,}.*")
试试这个(不确定它是否是你想要的......):
Pattern p = Pattern.compile("^[^\\.][\\w\\.]+[^\\.]$");
Pattern dotSeparated = Pattern.compile("^\\w+(\.\w+)*$");
如果需要,请替换\w
为[A-Za-z0-9]
or \\p{Alnum}
,因为\w
也允许使用下划线。
这匹配一个或多个字母数字字符,后跟零个或多个 [一个点,后跟一个或多个字母数字字符]。