我想创建正则表达式,允许所有字符和数字组合以及点,但不包括开头的点.所以有效字符串可以是"1.2.3"或"1.b.34d"或其他东西.但我想禁止像"."这样的字符串.或".1.2.3".
我正在尝试
[^.]{0,1}[ a-zA-Z_\\-\\.0-9]*
Run Code Online (Sandbox Code Playgroud)
但这不起作用.谁有更好的主意?
你可以用
s.matches("(?!\\.)[\\w\\s.-]*")
Run Code Online (Sandbox Code Playgroud)
该模式将匹配.由于否定前瞻 而不以a开头(?!\\.)并且包含零个或多个单词字符(字母,数字或下划线 - \w),空格(\s).或-符号的字符串.注意你不需要^/ \A,也不$/ \z自String#matches()方法默认情况下锚定模式.
注:为了使这种模式也支持Unicode,添加(?U)(一个Pattern.UNICODE_CHARACTER_CLASS在模式的开始嵌入标志选项)s.matches("(?U)(?!\\.)[\\w\\s.-]*").