在Ruby中,使用正则表达式匹配一个数字而**不匹配其他**的最正确方法是什么?
(更新:此问题的主要焦点是测试“没有其他内容”部分) 给定一个可以包含任何内容的字符串s,Ruby中最正确的正则表达式是什么来检查它是否是一位数字而不是其他数字?(一位数字,仅一位数字)在Ruby中,使用正则表达式匹配一个数字而**不匹配其他**的最正确方法是什么?,ruby,regex,Ruby,Regex,(更新:此问题的主要焦点是测试“没有其他内容”部分) 给定一个可以包含任何内容的字符串s,Ruby中最正确的正则表达式是什么来检查它是否是一位数字而不是其他数字?(一位数字,仅一位数字) ^是字符串的开头,\d是数字,$是字符串的结尾 注意:如注释中所述,^和$适用于行和字符串,因此如果您计划使用多行输入,则应使用\a和\Z使用/\a\d\Z/ irb(main):001:0> "asd\n7\n" =~ /\A\d\Z/ => nil # works as false irb(ma
^
是字符串的开头,\d
是数字,$
是字符串的结尾
注意:如注释中所述,
^
和$
适用于行和字符串,因此如果您计划使用多行输入,则应使用\a
和\Z使用/\a\d\Z/
irb(main):001:0> "asd\n7\n" =~ /\A\d\Z/
=> nil # works as false
irb(main):002:0> "asd\n7\n" =~ /\A\d\z/
=> nil # works as false
irb(main):083:0> "7\n"=~/\A\d\Z/
=> 0 # \Z fails, need \z
irb(main):084:0> "7\n"=~/\A\d\z/
=> nil # works as false
irb(main):005:0> "7" =~ /\A\d\Z/
=> 0 # works as true
irb(main):006:0> "7" =~ /\A\d\z/
=> 0 # works as true
:
\z字尾
\Z字符串的结尾,或在换行符的结尾处尝试/\a\d(?![\S\W])/
^$
表示行,而不是字符串<代码>“asd\n7\n”=~/^\d$/
=>4他问的是regexp,而不是如何匹配它。。据推测,他知道如何在/../
中包含正则表达式,并与=
或.match
:)匹配。我认为这也得到了7\n
,OP在另一条评论中指出这是不可接受的。哇,杰米·扎温斯基(有些人,当遇到问题时,会思考“我知道,我会使用正则表达式。”现在它们有两个问题。
)再次出现。我没有Ruby fu来回答这个问题,但会相当于Pythonlen==1和s在字符串中。数字
有那么难吗?@delnan如果你需要用这种方式检查字符串的形式是否是2010-10-08
,那么它不是一个数字;)事实上,这是一种正则表达式发光的任务(我自己也很乐意使用它们——我天真的尝试是\d{4}-\d{2}-\d{2}
btw)但是,对于这个特殊的问题,我认为正则表达式是多余的。@德尔南实际上,这个问题不是测试一个数字作为主要目的。“这是一种奇怪的情况。。。你有迄今为止最好的解决方案,但你的选票是零。我投了1票给你,但有人否决了你的答案。+1代表链接和正确的解决方案。(如果我能给出+2,那么每个人都会自己得到+1.:-)
irb(main):001:0> "asd\n7\n" =~ /\A\d\Z/
=> nil # works as false
irb(main):002:0> "asd\n7\n" =~ /\A\d\z/
=> nil # works as false
irb(main):083:0> "7\n"=~/\A\d\Z/
=> 0 # \Z fails, need \z
irb(main):084:0> "7\n"=~/\A\d\z/
=> nil # works as false
irb(main):005:0> "7" =~ /\A\d\Z/
=> 0 # works as true
irb(main):006:0> "7" =~ /\A\d\z/
=> 0 # works as true
\z end of a string
\Z end of a string, or before newline at the end
s.scan(/\b\d\b/)
irb(main):001:0> "7\n" =~ /\b\d\z/
=> nil
irb(main):002:0> "7" =~ /\b\d\z/
=> 0
irb(main):016:0> "7" =~ /\A\d(?![\S\W])/
=> 0
irb(main):017:0> "7\n" =~ /\A\d(?![\S\W])/
=> nil
irb(main):018:0> "aljda\n7\n" =~ /\A\d(?![\S\W])/
=> nil
irb(main):022:0> "85" =~ /\A\d(?![\S\W])/
=> nil
irb(main):023:0> "b5" =~ /\A\d(?![\S\W])/
=> nil