如何检查一个string是否包含Ruby中的子string?

我有一个stringvariables的内容如下:

varMessage = "hi/thsid/sdfhsjdf/dfjsd/sdjfsdn\n" "/my/name/is/balaji.so\n" "call::myFunction(int const&)\n" "void::secondFunction(char const&)\n" . . . "this/is/last/line/liobrary.so" 

在上面的string中,我必须find一个子stringie

 "hi/thsid/sdfhsjdf/dfjsd/sdjfsdn\n" "/my/name/is/balaji.so\n" "call::myFunction(int const&)\n" 

我怎么find它? 我只需要确定子string是否存在。

你可以使用include? 方法:

 my_string = "abcdefg" if my_string.include? "cde" puts "String includes 'cde'" end 

如果情况是不相关的,那么不区分大小写的正则expression式是一个好的解决scheme:

 'aBcDe' =~ /bcd/i # evaluates as true 

这也适用于多行string。

请参阅Ruby的Regexp类。

你也可以这样做…

 my_string = "Hello world" if my_string["Hello"] puts 'It has "Hello"' else puts 'No "Hello" found' end # => 'It has "Hello"' 

扩大Clint Pachl的答案:

当expression式不匹配时,Ruby中的正则expression式返回nil 。 当它发生时,它返回匹配发生的字符的索引。 例如

 "foobar" =~ /bar/ # returns 3 "foobar" =~ /foo/ # returns 0 "foobar" =~ /zzz/ # returns nil 

注意在Ruby中只有nil和布尔expression式false评估为false是很重要的。 其他所有内容,包括空数组,空散列或整数0,计算结果为true。

这就是为什么上面的/ foo / example工作,以及为什么

 if "string" =~ /regex/ 

按预期工作。 如果匹配发生,只inputif块的“真实”部分。

三元的方式

 my_string.include?('ahr') ? (puts 'String includes ahr') : (puts 'String does not include ahr') 

要么

 puts (my_string.include?('ahr') ? 'String includes ahr' : 'String not includes ahr') 

比上面在Rails (从3.1.0版本以上)中可以接受的答案更简洁的成语是.in?

例如:

 my_string = "abcdefg" if "cde".in? my_string puts "'cde' is in the String." puts "ie String includes 'cde'" end 

我也认为它更可读。

参见http://apidock.com/rails/v3.1.0/Object/in%3F

(请注意,它只在Rails中可用,而不是纯Ruby。)

 user_input = gets.chomp user_input.downcase! if user_input.include?('substring') # Do something end 

这将帮助您检查string是否包含子string

 puts "Enter a string" user_input = gets.chomp # Ex: Tommy user_input.downcase! # tommy if user_input.include?('s') puts "Found" else puts "Not found" end 

您可以使用[]的string元素引用方法

[]可以是文字子串,索引或正则expression式:

 > s='abcdefg' => "abcdefg" > s['a'] => "a" > s['z'] => nil 

由于nil在function上与false相同,并且从[]返回的任何子string都是true ,所以可以像使用方法一样使用逻辑.include?

 0> if s[sub_s] 1> puts "\"#{s}\" has \"#{sub_s}\"" 1> else 1* puts "\"#{s}\" does not have \"#{sub_s}\"" 1> end "abcdefg" has "abc" 0> if s[sub_s] 1> puts "\"#{s}\" has \"#{sub_s}\"" 1> else 1* puts "\"#{s}\" does not have \"#{sub_s}\"" 1> end "abcdefg" does not have "xyz" 

只要确保你不要混淆索引与子string:

 > '123456790'[8] # integer is eighth element, or '0' => "0" # would test as 'true' in Ruby > '123456790'['8'] => nil # correct 

你也可以使用正则expression式:

 > s[/A/i] => "a" > s[/A/] => nil