Comment écrire un Rubis instruction switch (cas...quand) avec la regex et des références arrières?
Je sais que je peux écrire un Rubis cas de déclaration de vérifier un match contre une des expressions régulières.
Cependant, je voudrais utiliser les données de match de mon instruction return. Quelque chose comme ce semi-pseudo:
foo = "10/10/2011"
case foo
when /^([0-9][0-9])/
print "the month is #{match[1]}"
else
print "something else"
end
Comment puis-je y parvenir?
Merci!
Juste une remarque: je comprends que je n'aurai plus jamais utiliser une instruction switch pour un cas simple comme ci-dessus, mais ce n'est qu'un exemple. En réalité, ce que je cherche à atteindre est la mise en correspondance de nombreuses possibilités d'expressions régulières pour une date qui peut être écrit de différentes façons, et puis l'analyser avec Ruby classe Date en conséquence.
- Ruby la Date du jour.analyser comprend de nombreux formats de date. Avez-vous essayé?
- Bien qu'il ne veut pas répondre à cette question, vous pouvez consulter la Chronique bijou...
Vous devez vous connecter pour publier un commentaire.
Les références à la dernière regex correspondance des groupes sont toujours stockés dans pseudo variables
$1
à$9
:Vous pouvez également utiliser le
$LAST_MATCH_INFO
pseudo variable pour obtenir à l'ensemble de laMatchData
objet. Cela peut être utile lors de l'utilisation nommé capture:$1
,$2
...$9
ouRegexp.last_match(1)
comme recommandé par rubocopIci est une approche alternative qui vous obtient le même résultat, mais ne pas utiliser un commutateur. Si vous mettez vos expressions régulières dans un tableau, vous pourriez faire quelque chose comme ceci:
Déclarant
m
à l'extérieur du bloc permet de toujours être disponible aprèstrouver
est fait avec le bloc ettrouver
s'arrêtera dès que le bloc renvoie la valeur true si vous obtenez le même shortcutting comportement d'un interrupteur vous donne. Cela vous donne le pleinMatchData
si vous en avez besoin (peut-être que vous souhaitez utiliser nommé groupes de capture dans votre regexes) et joliment sépare votre regexes de votre recherche logique (qui peut ou peut ne pas donner le code plus clair), vous pouvez même charger votre regexes à partir d'un fichier de config ou de choisir l'ensemble d'entre eux vous avez voulu au moment de l'exécution.case
approche. Peut-être que vous souhaitez utiliser ug approche dans une tige de scénario, plutôt qu'une variable globale avec l'approche de cas(?)