[RUBY] Ich verstehe das! Kürzeste Übereinstimmung

Einführung

Es gibt eine kürzeste Übereinstimmung in einem regulären Ausdruck, aber lassen Sie uns überprüfen, wie er verwendet wird, während Sie den Vorgang mit einigen Beispielen beobachten.

Inhalt

str =" Ah ah "Ah" I "Uu" Ja "Oh" Kaka? " Wenn Sie nur den in Klammern eingeschlossenen Teil aus einer solchen Zeichenfolge extrahieren möchten (dh die drei Teile von "a", "u" und "oh" extrahieren möchten), verwenden Sie die kürzeste Übereinstimmung.

Lassen Sie uns vorher anhand einer einfachen Bewegung überprüfen.

** + ** stimmt in diesem Beispiel nicht überein, da es mit einem oder mehreren Zeichen übereinstimmt.

str = "Ah ah """
puts str.scan(/「.+」/)
=>Stimmt nicht überein

*** stimmt mit 0 oder mehr Zeichen überein, daher stimmt es in diesem Beispiel überein.

str = "Ah ah """
puts str.scan(/「.*」/)
=>「」
Was ist mit den folgenden Fällen?

Da es ein Zeichen ** a ** gibt, stimmt es überein.

str = "Ah ah "Ah""
puts str.scan(/「.+」/)
=>"Ah"

Dies stimmt auch überein, da 0 Zeichen ** a ** vorhanden sind. Das Ergebnis ist das gleiche.

str = "Ah ah "Ah""
puts str.scan(/「.*」/)
=>"Ah"
Kommen wir ein wenig zum Hauptthema

In diesem Beispiel stimmt der Teil mit ** "", der zuerst angezeigt wurde, und ** ", der zuletzt angezeigt wurde, überein. Das möchte ich nicht tun.

str = "Ah ah "ah" i "uu" yeah "oh""
puts str.scan(/「.+」/)
=>"Ah" ich "Uu" ja "oh"
Also was soll ich tun

**? Wenn Sie ** hinzufügen, wird die kürzeste Übereinstimmung erzielt.

str = "Ah ah "ah" i "uu" yeah "oh""
puts str.scan(/「.+?」/)
=>"A" "Uu" "Oh"

Herzliche Glückwünsche. : Klatsch Klatsch klatsch ::

Was ist, wenn ich das mache?

Wenn Sie *** anstelle von ** + ** verwenden, ist das Ergebnis dasselbe, aber ...

str = "Ah ah "ah" i "uu" yeah "oh""
puts str.scan(/「.*?」/)
=>"A" "Uu" "Oh"

Je nachdem, ob Sie mit ** "" ** übereinstimmen möchten oder nicht, müssen Sie ** + ** und *** ** richtig verwenden.

Wenn Sie nicht mit ** "" ** übereinstimmen möchten, verwenden Sie ** + **, das mehr als einem Zeichen entspricht.

str = "Ah ah "Ah" I "Uu" Yeah "Oh" Kaka """
puts str.scan(/「.+?」/)
=>"A" "Uu" "Oh"

Wenn Sie mit ** "" ** übereinstimmen möchten, verwenden Sie ***, das mit 0 oder mehr Zeichen übereinstimmt.

str = "Ah ah "Ah" I "Uu" Yeah "Oh" Kaka """
puts str.scan(/「.*?」/)
=>"A" "Uu" "Oh" ""

C'est fini :sweat_smile:

Recommended Posts

Ich verstehe das! Kürzeste Übereinstimmung
Ich habe das überprüft
Bei der Java-Parallelverarbeitung bin ich mir nicht sicher