我想创建正则表达式,允许所有字符和数字组合以及点,但不包括开头的点。所以有效字符串可以是“1.2.3”或“1.b.34d”或其他东西。但我想禁止像“。”这样的字符串。或“.1.2.3”。
我正在尝试
[^.]{0,1}[ a-zA-Z_\\-\\.0-9]*
但这不起作用。任何人都有更好的主意吗?
答案 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]*