8
votes

Comment puis-je écrire la regex "Tous les personnages sont les mêmes"?

J'aimerais qu'il correspond à: xxx

mais non: xxx

...


0 commentaires

4 Réponses :


8
votes

Utilisation des références du dos: xxx

Lire: Match n'importe quel caractère suivi de ce même caractère 0 ou plus de fois.

Selon le moteur Regexp et vos besoins, vous peut vouloir ancrer la regex pour ne correspond à la chaîne entière, pas de substrings.


3 commentaires

Essayer Java, mais system.out.println ("1111111" .matches ("(.) (\ 1) *")); imprime faux


@Julio: vous devez vous échapper à Java, c'est-à-dire une utilisation \\ 1 au lieu de \ 1 .


et quelle regex devrait être utilisée à des fins opposées? J'ai besoin de regex pour ne pas correspondre à des valeurs telles que "22222222" ou "Aaaaaaa"



26
votes

En supposant que le moteur Regex prend en charge les références de retour,

theString.matches("(.)\\1*")


11 commentaires

Essayer java, mais system.out.println ("1111111" .matches ("^ (.) \ 1 * $")); imprime faux.


@Julio: essayez "^ (.) \\ 1 * $" , avec 2 backslashes.


@Kenny: dans Java ^ et $ commençant et fin de ligne, pas de chaîne. Les correspondances Regex sont également ancrées par défaut. Alors juste "(.) \\ 1 *" va fonctionner.


@ SEPP2K: Par défaut, ^ et $ correspondent au début et à la fin de la chaîne, pas de ligne. Lorsque le drapeau (? M) est activé, ils correspondent au début et à la fin d'une ligne. Mais lorsque vous utilisez string.matches (...) , ^ et $ ne sont pas nécessaires: par défaut, correspond à des correspondances (.. .) correspondra à la chaîne d'entrée complète.


@Bart: the Javadocs pour le modèle disent" ^ le début d'une ligne "et" $ la fin d'une ligne "


@ Sepp2k, eh bien, alors le Javadoc est faux. Essayez-le vous-même: system.out.println ("a \ nb" .matches ("^ a $ \ nb $")); impressions false , tandis que System.out.println ("a \ nb" .matches ("(? M) ^ a $ \ nb $")); impression true .


@ Sepp2k, de la Javadoc également: "Par défaut, les expressions régulières ^ et $ ignorer les terminateurs de ligne et ne correspondent qu'au début et à la fin, respectivement, de toute la séquence d'entrée."


@Bart: Vous avez raison. Et oui, je viens de voir l'autre morceau dans les docs.


@ Sepp2k, il n'est jamais venu que ^ et $ est décrit comme vous venez de mentionner: plutôt déroutant de Sun, Err, Oracle! :)


Ajouter le backslash supplémentaire a fait fonctionner pour moi dans Python 3.x merci


et quelle regex devrait être utilisée à des fins opposées? J'ai besoin de regex pour ne pas correspondre à des valeurs telles que "22222222" ou "Aaaaaaa"



0
votes

Si vous voulez capturer ce que vous faites correspondre, c'est ^ (((.) \ 2 *) $


0 commentaires

0
votes

Juste pour avoir contribué à cette question, vous pouvez utiliser la bretelle:

(\ w +) \ s + \ 1

Il vérifie les mots répétés séparés par WhitSpace.


0 commentaires