Ich suche nach einer Möglichkeit, ein Regex-Match für eine Zeichenfolge in Ruby durchzuführen und es beim ersten Match kurzschließen zu lassen.
Die Zeichenfolge, die ich verarbeite, ist lang und sieht so aus, als würde die Standardmethode ( match
Methode) das Ganze verarbeiten, jede Übereinstimmung sammeln und ein MatchData-Objekt zurückgeben, das alle Übereinstimmungen enthält.
match = string.match(/regex/)[0].to_s
capture
Argument gefunden, mit dem Sie anstelle der vollständigen Übereinstimmung ein Capture zurückgeben können.Sie können verwenden
[]
: (was ist wiematch
)quelle
Wenn nur das Vorhandensein einer Übereinstimmung wichtig ist, können Sie mitgehen
In beiden Fällen
match
sollte nur der erste Treffer zurückgegeben werden, währendscan
die gesamte Zeichenfolge durchsucht wird. Deshalb wennquelle
Ich bin mir noch nicht sicher, ob diese Funktion fantastisch oder einfach nur verrückt ist, aber Ihre Regex kann lokale Variablen definieren.
(Entnommen aus http://ruby-doc.org/core-2.1.1/Regexp.html ).
quelle
regex =~ string", not when
string = ~ regex`Ein regulärer Ausdruck (regulärer Ausdruck) ist nichts anderes als eine endliche Zustandsmaschine (FSM).
Ein FSM versucht die Frage zu beantworten "Ist dieser Zustand möglich oder nicht?"
Es wird so lange versucht, eine Musterübereinstimmung vorzunehmen, bis eine Übereinstimmung gefunden wird (Erfolg) oder bis alle Pfade erkundet wurden und keine Übereinstimmung gefunden wurde (Fehler).
Bei Erfolg die Frage "Ist dieser Zustand möglich oder nicht?" wurde mit "Ja" beantwortet. Daher ist kein weiterer Abgleich erforderlich und der Regex kehrt zurück.
Sehen Sie diese und diese für weitere Informationen hierzu.
Weiter: Hier ist ein interessantes Beispiel , um zu demonstrieren, wie Regex funktioniert. Hier wird ein regulärer Ausdruck verwendet, um zu erkennen, ob eine gegebene Zahl eine Primzahl ist. Dieses Beispiel ist in Perl, kann aber auch in Ruby geschrieben werden.
quelle