2010-02-10 27 views
43

如何对正则表达式的字符串,如果整个字符串匹配(而不是子字符串)将返回true?如何测试一个整数字符串与红宝石正则表达式?

如:

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

谢谢。

+21

给一个人一个字符串比较,他会是真实的,给一个男人是一个正则表达式,他将失去推理和搜索互联网的所有能力。 – Lazarus 2010-02-10 12:25:15

+0

@doctororange,你愿意接受Tomas Markauskas'answer吗?我不能删除我的答案,因为你接受它,丁丁我忘记了Ruby处理(一些)正则表达式元字符不同于大多数正则表达式实现。谢谢。 – 2010-02-10 12:38:24

+0

完成。谢谢你的回复。 – doctororange 2010-02-11 14:11:44

回答

64

您可以将字符串的开头与\A匹配,最后以\Z结尾。在红宝石^$比赛还行的开头和结尾,分别为:

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

您希望使用\ z而不是\ Z来匹配整个字符串。 '“hi \ n”=〜/ \ Ahi \ Z /' – 2014-01-24 08:58:01

+1

返回值(当不为零)是第一个匹配的第一个字符的索引。 – 2016-03-22 14:58:59

4

所以,你问的是如何测试两个字符串是否相等,权呢?只要使用字符串平等!这传递的是你和托马斯举的例子每一个:

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

这是真的,但是一个正则表达式也允许你将'平等'的定义扩展到像/ ^(ee | oo)$ /很好的东西。 – doctororange 2010-02-11 13:55:39

+5

你是否得到这五个ups?我的意思是真的有帮助5人被告知,你可以检查字符串与平等操作... ... - xD我没有冒犯,但嘿来吧,这是真的吗? – Timo 2011-06-09 09:10:06

+1

@Timo Lehto:它通过了OP提供的每一个单一规格,加上其他答案中的每个例子,它比其他答案简单得多。我看不出有什么问题。 – 2011-06-10 15:21:17

15

这似乎为我工作,但它看起来丑陋的(可能是一个更有吸引力的方式是可以做到的):

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

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

例子:

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

注:Rails的控制台测试与红宝石(1.8.7)和导轨(3.1.1)