Retourne le premier match de Ruby regex

Je cherche un moyen d’effectuer un match regex sur une chaîne dans Ruby et de le court-circuiter lors de la première correspondance.

La chaîne que je traite est longue et à partir de quoi elle ressemble à la méthode standard (méthode de match ) traiterait le tout, collecterait chaque correspondance et renverrait un object MatchData contenant toutes les correspondances.

 match = ssortingng.match(/regex/)[0].to_s 

Vous pouvez essayer variableName[/regular expression/] . Ceci est un exemple de sortie de irb:

 irb(main):003:0> names = "erik kalle johan anders erik kalle johan anders" => "erik kalle johan anders erik kalle johan anders" irb(main):004:0> names[/kalle/] => "kalle" 

Vous pouvez utiliser [] : (qui est comme match )

 "foo+account2@gmail.com"[/\+([^@]+)/, 1] # matches what is inside () # => "account2" "foo+account2@gmail.com"[/\+([^@]+)/, 0] # matches whole regexp # => "+account2" 

Si seulement l’existence d’un match est importante, vous pouvez aller avec

 /regexp/ =~ "ssortingng" 

Dans tous les cas, la match ne doit renvoyer que le premier hit, tandis que le scan recherche dans toute la chaîne. Donc si

 matchData = "ssortingng ssortingng".match(/ssortingng/) matchData[0] # => "ssortingng" matchData[1] # => nil - it's the first capture group not a second match 

Je ne suis pas encore sûr que cette fonctionnalité soit géniale ou simplement complètement folle, mais votre regex peut définir des variables locales.

 /\$(?\d+)\.(?\d+)/ =~ "$3.67" #=> 0 dollars #=> "3" 

(Extrait de http://ruby-doc.org/core-2.1.1/Regexp.html ).

Une expression régulière (regex) n’est rien d’autre qu’une machine à états finis (FSM).

Un FSM tente de répondre à la question “Cet état est-il possible ou non?”

Il continue d’essayer de faire correspondre un motif jusqu’à ce qu’une correspondance soit trouvée (succès) ou jusqu’à ce que tous les chemins soient explorés et qu’aucune correspondance n’ait été trouvée (échec).

En cas de succès, la question “Cet état est-il possible ou non?” a été répondu avec un “oui”. Par conséquent, aucune autre correspondance n’est nécessaire et l’expression rationnelle est renvoyée.

Voir ceci et ceci pour plus sur ceci.

En outre, voici un exemple intéressant pour démontrer comment fonctionne la regex. Ici, une regex est utilisée pour détecter si un nombre donné est premier. Cet exemple est en perl, mais il peut aussi bien être écrit en ruby.