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

时间:2016-11-28 08:47:26

标签: java regex

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

我正在尝试

[^.]{0,1}[ a-zA-Z_\\-\\.0-9]*

但这不起作用。任何人都有更好的主意吗?

4 个答案:

答案 0 :(得分:7)

您可以使用

def do_stuff
  "hello"
end

puts do_stuff.class
puts do_stuff
p do_stuff


--output:--
String
hello
"hello"

由于negative lookahead s.matches("(?!\\.)[\\w\\s.-]*") ,模式将匹配不以.开头的字符串,并且包含零个或多个字符(字母,数字或下划线 - {{1 },),空白((?!\\.)),\w\s符号。请注意,您不需要. / -,也不需要^ / \A,因为默认情况下String#matches()方法会锚定模式。

注意:要使此模式支持Unicode,请在模式的开头添加$\z嵌入标记选项):(?U)

答案 1 :(得分:2)

使用否定前瞻:

s.matches("(?U)(?!\\.)[\\w\\s.-]*")

build.xml相当于^(?!\\.)[\w .-]+$

答案 2 :(得分:0)

请尝试^[^\.][ a-zA-Z_\\-\\.0-9]*

答案 3 :(得分:0)

在正则表达式中,点字符表示“任何字符”。为了匹配你需要逃脱的时间。

^[^\\.][ a-zA-Z_\\-\\.0-9]*