Was tun, = ~ und /\ bedeuten in Ruby?
Ich bisher gelehrt habe mich Ruby und für ein bestimmtes problem, das ich zu lösen versuche ich bemerken viele Menschen sind mit =~
und /\
in Ihrem code. Ich bin mir nicht wirklich sicher, wie Sie funktionieren und würde nur gerne eine Erklärung. Zum Beispiel war ich auf der Suche auf someones-code für diese Pig Latin übersetzer und dies ist das erste mal, dass ich ' m sehen, diese verwendet wird.
def piglatin(word)
if word =~ (/\A[aeiou]/i)
word = word + 'ay'
elsif word =~ (/\A[^aeiou]/i)
match = /\A[^aeiou]/i.match(word)
word = match.post_match + match.to_s + 'ay'
end
word
end
Ich bin einfach verwirrt über die /\
Schrägstriche und die =~
- Hier ist die doc für die Methode Regexp#=~ und es ist
\A
, nicht\/`. where
\` entweicht die folgenden Charakter -, aber das, was Sie tun müssen, ist Lesen, auf "reguläre Ausdrücke". In jedem Buch über Ruby und zig URLs. Es ist ein großes Thema.
Du musst angemeldet sein, um einen Kommentar abzugeben.
=~
ist bekannt als die "match-operator" und kann verwendet werden, um einen string gegen einen regulären Ausdruck.Den
/\
ist eigentlich Teil zwei getrennte Dinge./
kennzeichnet den Beginn eines regulären Ausdrucks und der\A
ist bekannt als ein "Anker" und sagt, "match vom Anfang der Zeichenkette."edit: Dies ist ein link auf die Dokumentation, die Ihnen helfen sollen zu verstehen, mehr code, wie du gepostet hast.
danke an Wayne Conrad für eine Korrektur '/\'
/apple/
erstellt einen regulären Ausdruck. Mit backslashes in dem Ausdruck entgeht der Charakter/\./
entspricht einem tatsächlichen Punkt-Zeichen anstelle von Buchstaben.\A
und\.
sind verschiedene Fälle und dazu führen würde, den Weg zu erklären regex schlechter als die Referenz-Dok.=~
ist Ruby ' s pattern-matching-operator.Es entspricht einem regulären Ausdruck auf der linken Seite, um eine Zeichenfolge auf der rechten Seite.
Wenn eine übereinstimmung gefunden wird, wird der index der ersten übereinstimmung im string zurückgegeben. Wenn die Zeichenfolge nicht gefunden, wird nil zurückgegeben.
In diesem Fall der Ausdruck gibt 0 zurück, denn das ist der index der ersten übereinstimmung von "abc" in der Zeichenfolge.
wird nil zurückgegeben, weil "xyz" kann nicht gefunden werden überall in der Zeichenfolge.
Als für
/\
:Beispiel:
Den equal-tilde-operator in der Rubin ist der "match" - operator. Sie nehmen einen regulären Ausdruck auf der linken Seite und der string entsprechend auf der rechten Seite. Der Ausdruck:
zurück 7, da eine übereinstimmung gefunden wird, die auf index 7 der Zeichenfolge. Der index beginnt bei 0.
Den Ausdruck:
zurückkehren wird null, da keine übereinstimmung vorhanden ist.
Den Einsatz von
/\A
und=~
abgesehen, dass code nicht gut geschrieben, also nicht nachahmen. Das ist ein bisschen mehr Ruby-like:Zu diesem Zweck
^
würde gearbeitet haben, sowie\A
als Sie sind beide "Anfang..." verankert. Diese sind aus den Anker-Definitionen:^
- Spiele Anfang der Zeile\A
- Spiele Anfang der Zeichenkette.if word[/\A[aeiou]/i]
ist zu sagen, wenn die Zeichenfolge entspricht entweder a, e, i, o oder u im Anfang der Zeichenfolge zurückgeben der Wort + ay. die/i
ist also der Fall, spielt keine Rolle. Aus irgendeinem Grund dachte ich[aeiou]
werden musste, wie["a", "e", "i", "o", "u"]