J'essaie d'écrire une regex dans Ruby pour rechercher une chaîne pour des chiffres de seulement quatre chiffres. J'utilise de EG: " Dans ce cas, je veux seulement
/ \ d {4} / code> mais cela me donne un numéro avec quatre chiffres de quatre et plus. P>
12345-456-6575 Quelque texte 9897 code>" p>
9897 code> et 6575 code> mais je reçois aussi 1234 code> qui a une longueur de cinq caractères. p>
6 Réponses :
Vous devez ajouter une condition de plus à votre expression: le numéro ne peut être retourné que s'il y a 4 chiffres et le caractère avant et après que le nombre à 4 chiffres doit être un numéro non-numéro. P>
Et s'il n'y a pas de caractère avant ou après le numéro?
"12345-456-6575 some text 9897".scan(/\b\d{4}\b/)
=> ["6575", "9897"]
Le \ B code> est pratique car il correspondra au début, à la fin ou à un mot "rupture".
Vous devez spécifier un séparateur pour le motif. Comme si les chiffres seraient précédés et suivis d'un espace, la regex serait / \ s \ d {4} \ s / code>, espérons que cela aide. P>
C'est faux. a) Il échoue sur son exemple où les chiffres sont séparés par des tirets. b) Il échoue au début et à la fin de la chaîne. c) Il échoue même avec des espaces en tant que séparateurs s'il n'y a qu'un seul espace entre les nombres. REGARDER A 1234 5678 B CODE>: le deuxième \ s code> consomme le deuxième espace, alors la prochaine fois que la regex est appliquée, elle échoue car le moteur Regex est maintenant au début du deuxième numéro.
Essayez correspondant à une limite de mot ( \ b code>) des deux côtés de la séquence à quatre chiffres:
ou encore plus généralement: tout sauf un chiffre avant et / ou après les quatre chiffres:
/\D\d{4}\D/
Cela ne saisit que la première occurrence d'un nombre à 4 chiffres.
Cela échoue au début et à la fin de la chaîne, et il échoue lorsque des séquences de 4 chiffres sont séparées par un autre caractère (comme 1234-5678-9999 code>) car le \ d code > doit consommer un personnage.
@AJC: En JavaScript, peut-être. Pas en rubis.
ESSAY / [0-9] [0-9] [0-9] [0-9] [^ 0-9] / P>
Cela échoue à la fin de la chaîne, et il correspond toujours à cinq chiffres - il correspondra à 2345 code> dans 12345-54321 code>.
@Tim, oui. Il est faux. Dogbert a un bon je pense. Merci d'avoir signalé l'erreur.
Vous pouvez utiliser ce site pour tester votre expression régulière: http://rubular.com/ @Dogbert est juste par le manière, juste testé sa regex ...
Devrait-il correspondre
1234 code> dansabcd1234efgh code>?Vous pouvez utiliser ce site pour tester votre expression régulière: Rubular.com @Dogbert est juste à côté, il suffit de tester son regex ...