我有一个包含内容的字符串变量:

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"

在字符串中,我必须找到一个子字符串:

"hi/thsid/sdfhsjdf/dfjsd/sdjfsdn\n"

"/my/name/is/balaji.so\n"
"call::myFunction(int const&)\n"

我怎样才能找到它?我需要确定子字符串是否存在。


当前回答

扩展Clint Pachl的答案:

当表达式不匹配时,Ruby中的Regex匹配返回nil。当它这样做时,它将返回发生匹配的字符的索引。例如:

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

需要注意的是,在Ruby中,只有nil和布尔表达式false求值为false。其他所有内容(包括空数组、空哈希或整数0)的计算结果均为true。

这就是为什么上面的/foo/示例可以工作的原因。

if "string" =~ /regex/

工作正常,如果匹配,则只输入if块的“true”部分。

其他回答

扩展Clint Pachl的答案:

当表达式不匹配时,Ruby中的Regex匹配返回nil。当它这样做时,它将返回发生匹配的字符的索引。例如:

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

需要注意的是,在Ruby中,只有nil和布尔表达式false求值为false。其他所有内容(包括空数组、空哈希或整数0)的计算结果均为true。

这就是为什么上面的/foo/示例可以工作的原因。

if "string" =~ /regex/

工作正常,如果匹配,则只输入if块的“true”部分。

你也可以这样做。。。

my_string = "Hello world"

if my_string["Hello"]
  puts 'It has "Hello"'
else
  puts 'No "Hello" found'
end

# => 'It has "Hello"'

本例使用Ruby的String#[]方法。

如何在Ruby中检查字符串是否包含子字符串?

当您说“check”时,我假设您希望返回一个布尔值,在这种情况下,您可以使用String#match?。火柴接受字符串或正则表达式作为其第一个参数,如果是前者,则会自动转换为正则表达式。因此,您的用例是:

str = 'string'
str.match? 'strings' #=> false
str.match? 'string'  #=> true
str.match? 'strin'   #=> true
str.match? 'trin'    #=> true
str.match? 'tri'     #=> true

字符串#匹配?具有可选的第二个参数的附加优点,该参数指定了从中搜索字符串的索引。默认情况下,该值设置为0。

str.match? 'tri',0   #=> true
str.match? 'tri',1   #=> true
str.match? 'tri',2   #=> false

你可以使用include?方法:

my_string = "abcdefg"
if my_string.include? "cde"
   puts "String includes 'cde'"
end
user_input = gets.chomp
user_input.downcase!

if user_input.include?('substring')
  # Do something
end

这将帮助您检查字符串是否包含子字符串

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