2010-06-11 8 views
45

Ich sah dies auf einem Screencast und konnte nicht herausfinden, was es war. Referenzblätter stapeln sie einfach mit anderen Operatoren als allgemeinen Mustervergleichsoperator.Was ist der Operator "= ~" in Ruby?

+0

Suchen Sie es auf http://www.ruby-doc.org/core/ –

+11

@ user97370: Oft Rubin docs als frivol verwendet werden Lösung, um alle Fragen zu beantworten, ohne zu wissen, dass ruby ​​docs nicht immer einfach zu verstehen ist.Ziemlich oft (meistens) beginne ich mit Ruby Docs, verstehe die verschlüsselten, anämischen Erklärungen dann nicht mehr, Google findet nur, dass es auch keine Lösungen auf Google gibt. Man ruft nicht einfach "Ruby = ~" oder "Ruby = ~ method" oder "Ruby = ~ operator" an, um eine Antwort zu erhalten. Es wäre schön zu sehen, dass weniger Leute Ruby-Dokumente als eine faule Lösung herauswerfen und tiefer gehende Antworten sehen, die tatsächlich helfen. – Padawan

Antwort

42

Es entspricht String einem regulären Ausdruck.

'hello' =~ /^h/ # => 0

Wenn es keine Übereinstimmung gibt, wird es nil zurück. Wenn Sie ungültige Argumente übergeben (dh linke oder rechte Seite sind nicht korrekt), wird entweder TypeError oder false zurückgegeben.

4

Nun, die Referenz ist korrekt, es ist der Operator "entspricht dieser Regex".

if var =~ /myregex/ then something end 
-1

Ich glaube, das ist ein Mustervergleich Operator mit Regex verwendet.

15

Von ruby-doc:

str =~ obj => fixnum or nil

Match-Wenn obj ein Regexp ist, verwenden Sie es als ein Muster gegen str übereinstimmen, und gibt die Offset-Position, um die Übereinstimmung beginnt oder Null, wenn keine Übereinstimmung vorhanden ist. Andernfalls wird obj. = ~ Aufgerufen, wobei str als Argument übergeben wird. Der Standardwert = ~ in Object gibt false zurück.

"cat o' 9 tails" =~ /\d/ #=> 7 
"cat o' 9 tails" =~ 9  #=> false 
+1

"gibt die Position zurück, an der das Match beginnt", ist das wichtige Bit für mich :) Ich habe Google nach einer Antwort durchforstet .. fand es hier Danke! –

+0

Warum gibt das zweite Beispiel false zurück? Liegt es daran, dass '9' keine Zeichenfolge ist? –

1

Regulärer Ausdruck String-Matching:

wahr setzt, wenn url = ~ /google.com/

Sie lesen '= ~' wie 'ist passend'.

4

Wie die anderen Antworten bereits angegeben, =~ ist der reguläre Ausdruck vs String-Match-Operator.

Hinweis: Der =~ Operator ist

Bitte beachten Sie die Anmerkung unten nicht kommutativ vom ruby doc site, als ich noch

str =~ regexp 

in den anderen Antworten verwendet nur die erste Form gesehen haben:

Hinweis: str =~ regexp ist nicht dasselbe wie regexp =~ str. Zeichenketten aus benannten Erfassungsgruppen werden lokalen Variablen nur im zweiten Fall zugewiesen. Hier

ist die Dokumentation für die zweite Form: link