Je cherche un moyen d'effectuer une correspondance regex sur une chaîne en Ruby et de la faire court-circuiter lors du premier match.
La chaîne que je traite est longue et d'après ce à quoi elle ressemble, la match
méthode standard ( méthode) traiterait le tout, collecterait chaque correspondance et retournerait un objet MatchData contenant toutes les correspondances.
match = string.match(/regex/)[0].to_s
capture
argument - qui vous permet de renvoyer une capture au lieu de la correspondance complète.Vous pouvez utiliser
[]
: (qui est commematch
)la source
Si seule l'existence d'un match est importante, vous pouvez choisir
Quoi qu'il en soit,
match
ne devrait renvoyer que le premier appel, tandis que lesscan
recherches dans toute la chaîne. Donc sila source
Je ne sais pas encore si cette fonctionnalité est géniale ou tout simplement totalement folle, mais votre regex peut définir des variables locales.
(Tiré de http://ruby-doc.org/core-2.1.1/Regexp.html ).
la source
regex =~ string", not when
string = ~ regex`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 modèle 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 reçu une réponse "oui". Par conséquent, aucune autre correspondance n'est nécessaire et l'expression régulière revient.
Voir ceci et ceci pour en savoir plus.
De plus: voici un exemple intéressant pour démontrer le fonctionnement des 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 être écrit en ruby.
la source