872 Stimmen

Wie prüft man in Ruby, ob eine Zeichenkette eine Teilzeichenkette enthält?

Ich habe eine String-Variable mit Inhalt:

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"

In der Zeichenkette muss ich eine Teilzeichenkette finden:

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

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

Wie kann ich sie finden? Ich muss feststellen, ob der Teilstring vorhanden ist oder nicht.

1607voto

Adam Lear Punkte 36637

Sie können die include? Methode:

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

106voto

Clint Pachl Punkte 9726

Wenn der Fall irrelevant ist, dann ist ein von Groß- und Kleinschreibung unabhängiger regulärer Ausdruck ist eine gute Lösung:

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

Dies funktioniert auch bei mehrzeiligen Zeichenfolgen.

Siehe Ruby's Regexp Klasse für weitere Informationen.

72voto

Oto Brglez Punkte 3864

Sie können dies auch tun...

my_string = "Hello world"

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

# => 'It has "Hello"'

Dieses Beispiel verwendet den String von Ruby #[] Methode.

36voto

acib708 Punkte 1563

Erweiterung der Antwort von Clint Pachl:

Regex-Abgleich in Ruby liefert nil wenn der Ausdruck nicht übereinstimmt. Wenn dies der Fall ist, wird der Index des Zeichens zurückgegeben, bei dem die Übereinstimmung auftritt. Zum Beispiel:

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

Es ist wichtig zu beachten, dass in Ruby nur nil und der boolesche Ausdruck false als falsch auswerten. Alles andere, einschließlich eines leeren Arrays, eines leeren Hash oder der Ganzzahl 0, wird als true ausgewertet.

Deshalb ist die /foo/ obiges Beispiel funktioniert, und warum.

if "string" =~ /regex/

funktioniert wie erwartet, indem nur der 'true'-Teil der if Block, wenn eine Übereinstimmung aufgetreten ist.

30voto

stwr667 Punkte 1161

Ein prägnanteres Idiom als die akzeptierte Antwort oben, das in Rails (ab 3.1.0 und höher) verfügbar ist, ist .in? :

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

Ich denke auch, dass es besser lesbar ist.

Siehe die in? Dokumentation für weitere Informationen.

Auch hier ist zu beachten, dass es nur verfügbar ist in Schiene und nicht nur Ruby.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X