2010-03-21 13 views
2

Je suis en train d'écrire une expression rationnelle pour faire correspondre les paires de cartes (AA, KK, QQ ... 22) et j'ai la regex ([AKQJT2-9])\1. Le problème que j'ai est que cette regex va correspondre AA ainsi que AAbc etc. Y at-il un moyen d'écrire l'expression régulière de telle sorte que je peux spécifier que je veux correspondre ([AKQJT2-9])\1 et seulement cela (c'est-à-dire pas plus de caractères après).regex pour vérifier la chaîne est certaine longueur

Merci

Répondre

5

Entourez l'expression rationnelle dans ^ et $: ancre

^([AKQJT2-9])\1$ 

^ est le point d'ancrage « de début de chaîne », et $ est le « bout de chaîne ». Si votre saveur regex le supporte, \A et \Z pourraient être un choix encore meilleur puisque ^ et $ peuvent également correspondre début/fin d'une ligne dans une chaîne multiligne, en fonction de votre moteur regex et de sa configuration.

3

Vous voulez dire, comme ça?

^([AKQJT2-9])\1$ 

Il ne fonctionne que si la chaîne est « AA », « KK », ...

Si vous voulez capturer les deux personnages, mais pas le reste de la chaîne, vous devrez utiliser une autre parenthèse

($match,$unused) = $string ~= (([AKQJT2-9])\2); # in perl