我想知道如何编写一个Ruby正则表达式,表明它应该以字母数字字符开头,后跟只有字母数字和-
(在任何序列中)。
所以从字母数字开始,我知道它是:
/\A[A-Za-z0-9]/
我怎么说在此之后我只能允许使用字母数字字符和-
?我是Ruby和正则表达式的新手。有什么建议吗?
我是否可以通过更深入的方式了解正则表达式和Ruby?我发现http://rubylearning.com/satishtalim/ruby_regular_expressions.html很有用。
答案 0 :(得分:3)
您已拥有初始的字母数字字符类[A-Za-z0-9]
。对于下一个字符,您只想将-
添加到此:[A-Za-z0-9-]
。因此最终的正则表达式是:
[A-Za-z0-9][A-Za-z0-9-]*
请注意,X*
表示" X
0次或更多次" 。如果您想要" X
一次或多次" ,请使用X+
。
答案 1 :(得分:0)
r1 = /^[A-Za-z0-9][A-Za-z0-9-]*$/ #=> /^[A-Za-z0-9][A-Za-z0-9-]*$/
r2 = /^[A-Za-z0-9-]*$/ #=> /[A-Za-z0-9-]*$/
str = "3birdsweresittingonawire-nowtherearebuttwo"
str =~ r1 #=> 0 (truey)
或
(str =~ r2) and str[0] != '-' #=> true
str = " % 3birdsweresittingonawire-nowtherearebuttwo"
str =~ r1 #=> nil
(str =~ r2) and str[0] != '-' #=> nil
第二个示例显示了为什么需要锚点^
和$
。