Ответ 1
Вы можете использовать метод include?
:
my_string = "abcdefg"
if my_string.include? "cde"
puts "String includes 'cde'"
end
У меня есть строковая переменная с контентом следующим образом:
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"
в приведенной выше строке я должен найти подстроку i.e.
"hi/thsid/sdfhsjdf/dfjsd/sdjfsdn\n"
"/my/name/is/balaji.so\n"
"call::myFunction(int const&)\n"
Как я могу его найти? Мне просто нужно определить, присутствует ли подстрока или нет.
Вы можете использовать метод include?
:
my_string = "abcdefg"
if my_string.include? "cde"
puts "String includes 'cde'"
end
Если случай не имеет значения, то нечувствительное к регистру регулярное выражение является хорошим решением:
'aBcDe' =~ /bcd/i # evaluates as true
Это также будет работать для многострочных строк.
См. раздел Ruby Regexp.
Вы также можете сделать это...
my_string = "Hello world"
if my_string["Hello"]
puts 'It has "Hello"'
else
puts 'No "Hello" found'
end
# => 'It has "Hello"'
Развернувшись на ответе Клинта Пачля:
Согласование регулярных выражений в Ruby возвращает nil, когда выражение не совпадает. Когда это произойдет, он возвращает индекс символа, в котором происходит совпадение. Например
"foobar" =~ /bar/ # returns 3
"foobar" =~ /foo/ # returns 0
"foobar" =~ /zzz/ # returns nil
Важно отметить, что в Ruby только nil и логическое выражение false вычисляются как false. Все остальное, включая пустой массив, пустой хэш или целое число 0, имеет значение true.
Вот почему работает /foo/example выше и почему
if "string" =~ /regex/
работает как ожидалось. Только ввод "истинной" части блока if, если произошло совпадение.
Тернативный путь
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 "i.e. String includes 'cde'"
end
Я также считаю его более читаемым.
c.f. 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
Это поможет вам проверить, содержит ли строка подстроку или нет.
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 Element Reference, который []
Внутри []
может быть буквальная подстрока, индекс или регулярное выражение:
> s='abcdefg'
=> "abcdefg"
> s['a']
=> "a"
> s['z']
=> nil
Так как nil
функционально совпадает с false
, и любая подстрока, возвращаемая из []
, равна 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"
Просто убедитесь, что вы не путаете индекс с подстрокой:
> '123456790'[8] # integer is eighth element, or '0'
=> "0" # would test as 'true' in Ruby
> '123456790'['8']
=> nil # correct
Вы также можете использовать регулярное выражение:
> s[/A/i]
=> "a"
> s[/A/]
=> nil