Utilisation d'une Expression Régulière Correspondre à une Chaîne de caractères qui contient les numéros des lettres et tirets
J'ai besoin pour correspondre à cette chaîne 011Q-0SH3-936729
mais pas 345376346
ou asfsdfgsfsdf
Il doit contenir des caractères ET des chiffres ET des tirets
Modèle pourrait être 011Q-0SH3-936729
ou 011Q-0SH3-936729-SDF3
ou 000-222-AAAA
ou 011Q-0SH3-936729-011Q-0SH3-936729-011Q-0SH3-936729-011Q-0SH3-936729
et je veux qu'il soit en mesure de correspondre à n'importe qui de ces. La raison pour cela est que je ne sais pas vraiment si le format est fixe et je n'ai aucun moyen de le découvrir, soit j'ai donc besoin de venir avec une solution générique pour un modèle avec un nombre de tirets et le motif récurrent de n'importe quel nombre de fois.
Désolé c'est probablement une question stupide, mais j'ai vraiment sucer des expressions Régulières.
TIA
Savons-nous combien de tirets? Sont-il toujours régulière de la taille des groupes de lettres et de chiffres entre les tirets? Des lettres de A à Z? ...ou une plus grande tranche de la série de caractères?
sont des tirets dans une position fixe ou peuvent-ils être n'importe où? (MDR... j'ai été trop lent 🙂
Les tirets pourrait être n'importe où et il pourrait y avoir un certain nombre de traits.
Même au bout de la chaîne?
OriginalL'auteur n4rzul | 2011-03-04
Vous devez vous connecter pour publier un commentaire.
devrait faire ce que vous voulez. Si par les lettres/chiffres que vous avez voulu dire "seulement ASCII des lettres/chiffres" (et non internationaux Unicode/lettres, trop), puis utilisez
-0-A-
(avec attaque et de fuite des tirets)A l'OP ne plaise que?
Non je n'ai pas, mais je ne l'ai mentionne qu'il n'était pas nessacary pour les accueillir si c'est le cas. Si il y a des tirets dans cette chaîne, tant qu'ils font partie de la même chaîne, qui est très bien. Cela fonctionne parfaitement pour ce que j'en avais besoin. Merci Tim, Vous êtes un génie. Et merci pour expliquer votre regex et comment il fonctionne, vous méritez un +1 pour ça, j'ai appris quelques choses aujourd'hui.
OriginalL'auteur Tim Pietzcker
EDIT:
cela correspond à tout de la clé fournie dans vos commentaires:
cela signifie que la clé commence par le chiffre ou la lettre et avoir au leats un symbole du tiret:
voir ma réponse mis à jour
Cela correspond
A-A
ou0-0
(voir la deuxième phrase de la question).OriginalL'auteur Alex
Sans plus d'info sur la régularité de la tirets ou autre, c'est le mieux que nous puissions faire:
Bien que cela permettra également de match-A-0
OriginalL'auteur spender
Plus naïve de la mise en œuvre JAMAIS (ce qui pourrait vous aider à démarrer):
Testé avec Regex Coach.
EDIT:
Qui ne correspond pas à seulement trois groupes; voici une autre, un peu mieux:
OriginalL'auteur Manrico Corazzi
Appliquez-vous la regex pour l'ensemble de la chaîne (c'est à dire, de valider ou de filtrage)? Si oui, Tim réponse devrait vous mettre à droite. Mais si vous êtes la cueillette des matchs à partir d'une chaîne plus longue, cela devient un peu plus compliqué. Voici comment j'ai fait ça:
de sortie:
Le négatif lookarounds servir de " mot " limites: ils assurent la sous-chaîne correspondante commence, soit au début de la chaîne ou après un caractère d'espacement (
(?<!\S)
), et se termine soit à la fin de la chaîne ou avant un caractère d'espacement ((?!\S)
).Les trois positive lookaheads travail tout comme Tim, sauf qu'ils utilisent
\S*
à ignorer tout ce qui précède la première lettre/chiffre/trait d'union. Nous ne pouvons pas utiliser.*
dans ce cas, parce que cela lui permettrait de passer au mot suivant ou la suivante, etc., vaincre le but de l'anticipation.OriginalL'auteur Alan Moore