114 votes

Retour premier match de Ruby regex

Je suis à la recherche d'un moyen pour effectuer une regex match sur une chaîne en Ruby et ont court-circuit sur le premier match.

La chaîne je suis le traitement est long et de ce qu'elle ressemble à la méthode standard (match méthode) pour traiter l'ensemble de la chose, de recueillir chaque match, et le retour d'un MatchData objet contenant tous les matches.

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

159voto

Presidenten Points 1889

Vous pourriez essayer d' variableName[/regular expression/]. Ceci est un exemple de sortie de la cisr:

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"

89voto

pinouchon Points 7706

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"

26voto

Slartibartfast Points 5469

Si seulement l'existence d'un match est important, vous pouvez aller avec

/regexp/ =~ "string"

De toute façon, match doit renvoyer uniquement le premier succès, tout en scan des recherches tout au long de toute la chaîne. Donc si

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

2voto

Litmus Points 2576

Une Expression Régulière (regex) n'est rien mais une machine à états finis (FSM).

Un FSM tente de répondre à la question "Est-ce à l'état de possible ou pas?"

Il continue de tenter de faire une mise en correspondance du modèle jusqu'à ce qu'une correspondance est trouvée (succès), ou jusqu'à ce que toutes les voies sont explorées et aucune correspondance n'a été trouvée (échec).

En cas de succès, la question "Est-ce à l'état de possible ou pas?" a été répondu par un "oui". Par conséquent, aucune autre correspondance est nécessaire et la regex retourne.

Voir ce et ce pour en savoir plus sur cette.

Plus loin: voici un exemple intéressant de montrer comment regex fonctionne. Ici, une expression régulière est utilisé pour détecter si un numéro est premier. Cet exemple est en perl, mais il peut aussi bien être écrit en ruby.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X