Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby中的正则表达式:只有一个匹配?_Ruby_Regex - Fatal编程技术网

Ruby中的正则表达式:只有一个匹配?

Ruby中的正则表达式:只有一个匹配?,ruby,regex,Ruby,Regex,我试图找出如何检查字符串是否与正则表达式匹配,但我想知道整个字符串是否只匹配一次。这是我的代码,但看起来太长了 def single_match(test_me, regex) ret_val = false test = regex.match(test_me) if (test.length==1 && test[0].length == test_me.length) ret_val = true end return ret_val end

我试图找出如何检查字符串是否与正则表达式匹配,但我想知道整个字符串是否只匹配一次。这是我的代码,但看起来太长了

def single_match(test_me, regex)
  ret_val = false
  test = regex.match(test_me)
  if (test.length==1 && test[0].length == test_me.length)
      ret_val = true
  end
  return ret_val
end
有没有更简单的方法

另外,这是我真正想写的方法,因为人们似乎总是问我为什么这些天想要枪:

def is_int(test_me)
  return single_match(test_me, /[0-9]*/)
end
编辑谢谢大家,但是这个正则表达式的东西总是很有趣。谢谢你的精彩和教育性的回答。

这是什么

def single_match(str, regex)
  str.match(regex).to_s == str
end

不需要这样做,可以使用/^[0-9]*$/的正则表达式替换方法。^表示匹配行首,$表示匹配行尾。所以它将匹配:行的开始,0到0到9范围内的任何值,最后是行的结束

def is_int(test_me)
  test_me =~ /^[0-9]*$/
end
您不需要返回语句,Ruby隐式返回最后一条语句

编辑:

使用类的实例方法可能更容易,看起来也更好

编辑:做了一些测试


比较这两种方法的性能表明.to_i.to_s==way快5%。所以,这取决于个人喜好,哪一个看起来更好,如果你想处理前导零。

做你真正想做的事情应该更简单

def is_int(test_me)
  test_me.to_i.to_s == test_me
end

为了回答您的原始问题,为了便于人们在搜索中查找此页面,scan将返回一个匹配数组,因此如果您想了解某些regexp匹配的次数,例如,有多少次的数字,可以执行以下操作:

mystring.scan(/\d+/).size

雷格克斯!我喜欢你的答案和扎克·兰利的答案。。。谢谢。这也将匹配空字符串。考虑/^ d+$/这可能是一件好事或坏事。因为他在他的问题中用了,所以我用了。他可能希望一个空字符串被看作是第0个数字。”塞缪尔:是的,这就是为什么我说要考虑。这是一个拷贝和粘贴,还是并行的进化?这将不会与前面的0的工作,但将与否定。1我想你可能会认为整数不应该有前导零,假设函数正试图确定它。就我而言,没有前导零是可以的,但仍然。。。我想不出来的原因是什么?奇怪…0000123.to_我给123-这对我来说很有意义。因此,当你把它变回字符串时,比较失败了我明白了,赫尔曼德。。。有趣的但正如每个人都向我指出的那样,我不应该做这样的类型转换,所以我想这很好…你会知道有多少个数字,但不知道它们是否占据了整个字符串,这是个问题,还是它的一部分。因此,将mystring设置为3332b与使用扫描正则表达式设置为3是一样的。啊,短语中的歧义整个字符串只匹配一次:字符串中的任何地方只有一个匹配,而字符串是完全匹配的…谢谢Glenn,我从未被告知您的评论,非常好的一点。
mystring.scan(/\d+/).size