【问题标题】:How do I test a WHOLE string against regex in ruby?如何在 ruby​​ 中针对正则表达式测试整个字符串?
【发布时间】:2011-01-15 06:04:10
【问题描述】:

如果 整个 字符串匹配(不是子字符串),我如何针对正则表达式创建字符串以使其返回 true?

例如:

test( \ee\ , "street" ) #=> returns false
test( \ee\ , "ee" ) #=> returns true!

谢谢。

【问题讨论】:

  • 给一个人一个字符串比较,他会是真的,给一个人一个正则表达式,他会失去所有推理和搜索互联网的能力。
  • @doctororange,您能接受 Tomas Markauskas 的回答吗?自从您接受它以来,我无法删除我的答案,但是我忘记了 Ruby 处理(某些)正则表达式元字符的方式与大多数正则表达式实现不同。谢谢。
  • 完成。谢谢两位的回复。

标签: ruby regex string


【解决方案1】:

您可以将字符串的开头与\A 匹配,并将字符串结尾与\Z 匹配。在 ruby​​ 中,^$ 也分别匹配行的开头和结尾:

>> "a\na" =~ /^a$/
=> 0
>> "a\na" =~ /\Aa\Z/
=> nil
>> "a\na" =~ /\Aa\na\Z/
=> 0

【讨论】:

  • 您想使用 \z 而不是 \Z 来匹配整个字符串。 "hi\n" =~ /\Ahi\Z/
  • 返回值(不为零时)是第一个匹配的第一个字符的索引。
【解决方案2】:

这似乎对我有用,虽然它看起来很丑(可能是一种更有吸引力的方式):

!(string =~ /^ee$/).nil?

当然,上面 // 里面的所有内容都可以是你想要的任何正则表达式。

例子:

>> string = "street"
=> "street"
>> !(string =~ /^ee$/).nil?
=> false
>> string = "ee"
=> "ee"
>> !(string =~ /^ee$/).nil?
=> true

注意:在 Rails 控制台中使用 ruby​​ (1.8.7) 和 rails (3.1.1) 测试

【讨论】:

    【解决方案3】:

    那么,您要问的是如何测试两个字符串是否相等,对吧?只需使用字符串相等!这通过了您和 Tomas 引用的每一个示例:

    'ee'   == 'street' # => false
    'ee'   == 'ee'     # => true
    "a\na" == 'a'      # => false
    "a\na" == "a\na"   # => true
    

    【讨论】:

    • 这是真的,但是正则表达式还允许您将“等于”的定义很好地扩展到 /^(ee|oo)$/ 之类的东西。
    • @Timo Lehto:它通过了 OP 提供的每一个规范,加上另一个答案中的每个示例,它比另一个答案简单得多。我看不出有什么问题。
    • 我不想被无用的喋喋不休淹没,所以我只说一件事。问题显然是关于正则表达式的。我不知道为什么“愚蠢”的例子。虽然您的回答可能会或可能不会作为 doc 的一个很好的指针,但我看不出任何人在这里找到他的方式来寻找问题的答案可以以任何方式受益。这就是为什么我对您的回答似乎帮助 5 人了解他们不需要使用正则表达式进行字符串相等性检查这一事实感到如此好笑的原因。 xD
    • 我想你误解了作者的意思。我认为他的意思是整个字符串必须匹配正则表达式,而不是子字符串(即使用 ^$ 或类似的)
    • @Ctx:OP 的Regexps 实际上根本没有使用任何Regexp 功能。没有交替,没有重复,没有通配符,没有字符类,没有捕获组,没有引用,什么都没有。首先使用Regexps 没有任何意义。我的答案通过了 OP 问题中的每一项测试以及已接受答案中的每一项测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多