当前位置:  开发笔记 > 后端 > 正文

Ruby中的RegEx:只有一场比赛?

如何解决《Ruby中的RegEx:只有一场比赛?》经验,为你挑选了1个好方法。

我试图找出如何检查字符串是否匹配正则表达式,但我想知道整个字符串是否只匹配一次.这是我的代码,但似乎很荒谬

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

有更简单的方法吗?

PS这是我真正想写的方法,因为人们似乎总是在问这些天我为什么要拿枪?

def is_int(test_me)
  return single_match(test_me, /[0-9]*/)
end

编辑谢谢大家.这是我真正使用它的地方,但这个正则表达式的东西总是很有趣.感谢伟大而有教育意义的答案.



1> Samuel..:

您不需要这样做,您的方法可以使用正则表达式替换/^[0-9]*$/.该^告诉它匹配行的起点和$告诉它匹配行尾.因此它将匹配:行的开始,0到0到9范围内的任何一个,最后是行尾.

def is_int(test_me)
  test_me =~ /^[0-9]*$/
end

并且您不需要return语句,Ruby隐式返回最后一个语句.

编辑:

使用类的to_i实例方法可能会更容易,看起来更好String.

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

编辑:(做了一些测试)

比较两种方法之间的性能表明,这种.to_i.to_s ==方式的速度提高了5%.因此,如果你想要处理领先的零,这取决于个人喜好哪个看起来更好.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有