如何禁止"." (点)作为正则表达式中的第一个字符

use*_*859 1 java regex

我想创建正则表达式,允许所有字符和数字组合以及点,但不包括开头的点.所以有效字符串可以是"1.2.3"或"1.b.34d"或其他东西.但我想禁止像"."这样的字符串.或".1.2.3".

我正在尝试

[^.]{0,1}[ a-zA-Z_\\-\\.0-9]*
Run Code Online (Sandbox Code Playgroud)

但这不起作用.谁有更好的主意?

Wik*_*żew 7

你可以用

s.matches("(?!\\.)[\\w\\s.-]*")
Run Code Online (Sandbox Code Playgroud)

该模式将匹配.由于否定前瞻 而不以a开头(?!\\.)并且包含零个或多个单词字符(字母,数字或下划线 - \w),空格(\s).-符号的字符串.注意你不需要^/ \A,也不$/ \zString#matches()方法默认情况下锚定模式.

:为了使这种模式也支持Unicode,添加(?U)(一个Pattern.UNICODE_CHARACTER_CLASS在模式的开始嵌入标志选项)s.matches("(?U)(?!\\.)[\\w\\s.-]*").