检查一个字符串是否包含Ruby中的“udlr”序列

时间:2014-02-14 16:57:20

标签: ruby string

如果我有一个字符串,我如何检查该字符串是否包含任何“rldu”序列?我真的很喜欢红宝石,对不起,如果这是一个愚蠢的问题。

右转,左转,下降,升降。

例如:

str = "udlv"      #should return false
str = "lrd"       #should return true

4 个答案:

答案 0 :(得分:2)

假设字符串应完全由任意顺序的给定四个字符组成

str =~ /^[rldu]+$/

将返回可在条件中使用的整数或nil。如果你想要一个布尔值,请使用!!

的技巧
!!str.match(/^[rldu]+$/)

答案 1 :(得分:2)

如果您想检查字符串是否包含 udlr以外的任何内容,那么

!("udlv" =~ /[^udlr]/) # => false
!("lrd" =~ /[^udlr]/)  # => true

答案 2 :(得分:2)

这个不使用正则表达式:

p "udlv".count("^rlrd").zero?  #=> false
p "lrd".count("^rldu").zero?   #=> true

“^ rldu”的意思是“除了rldu之外的其他所有东西”

答案 3 :(得分:1)

假设通过'rldu“'的任何序列,您的意思是要验证该字符串仅由rld,{{1}组成(任何次数,任何顺序),没有别的,一个好的旧正则表达式应该可以正常工作:

u

如果您严格要求它是一个布尔值(true / false),那么您可以在前面添加两个惊叹号(不是双倍),如下所示:

str =~ /^[udlr]*$/

在大多数情况下,您不需要这样做,因为Ruby无论如何都可以将任何值解释为true或false。

您可以查看所有!!(str =~ /^[udlr]*$/) 核心方法here的文档。 here是正则表达式的指南。