Il y a une correspondance la plus courte dans une expression régulière, mais vérifions comment l'utiliser en regardant l'opération avec quelques échantillons.
str =" Ah ah "Ah" je "Uu" Oui "Oh" Kaka? "
Si vous souhaitez extraire uniquement la partie entre parenthèses d'une telle chaîne de caractères (c'est-à-dire que vous souhaitez extraire les trois parties de "a", "u" et "oh"), vous utiliserez la correspondance la plus courte.
** + ** ne correspond pas dans cet exemple car il correspond à un ou plusieurs caractères.
str = "Ah ah """
puts str.scan(/「.+」/)
=>Ne correspond pas
*** correspond à 0 caractères ou plus, donc il correspond dans cet exemple.
str = "Ah ah """
puts str.scan(/「.*」/)
=>「」
Puisqu'il y a un caractère ** a **, il correspond.
str = "Ah ah "Ah""
puts str.scan(/「.+」/)
=>"Ah"
Cela correspond également car il y a 0 caractère ** a **. Le résultat est le même.
str = "Ah ah "Ah""
puts str.scan(/「.*」/)
=>"Ah"
Dans cet exemple, la partie entourée par ** "" qui est apparue en premier et ** " qui est apparue en dernier correspondra. Ce n'est pas ce que je veux faire.
str = "Ah ah "ah" i "uu" ouais "oh""
puts str.scan(/「.+」/)
=>"Ah" je "Uu" Oui "Oh"
**? Si vous ajoutez **, la correspondance sera la plus courte.
str = "Ah ah "ah" i "uu" ouais "oh""
puts str.scan(/「.+?」/)
=>"A" "Uu" "Oh"
Toutes nos félicitations. : Clap clap clap ::
Si vous utilisez *** au lieu de ** + **, le résultat est le même, mais ...
str = "Ah ah "ah" i "uu" ouais "oh""
puts str.scan(/「.*?」/)
=>"A" "Uu" "Oh"
Selon que vous voulez faire correspondre ** "" ** ou non, vous devrez utiliser ** + ** et *** ** correctement.
Si vous ne souhaitez pas faire correspondre ** "" **, utilisez ** + **, qui correspond à un ou plusieurs caractères.
str = "Ah ah "Ah" je "Uu" Ouais "Oh" Kaka """
puts str.scan(/「.+?」/)
=>"A" "Uu" "Oh"
Si vous voulez faire correspondre ** "" **, utilisez ***, qui correspond à 0 caractère ou plus.
str = "Ah ah "Ah" je "Uu" Ouais "Oh" Kaka """
puts str.scan(/「.*?」/)
=>"A" "Uu" "Oh" ""
C'est fini :sweat_smile: