2010-08-28 6 views
2

J'ai besoin d'aide pour trouver une expression régulière qui corresponde si une chaîne contient plus d'une occurrence de caractère. J'ai déjà validé la longueur des deux cordes et elles seront toujours égales. Heres ce que je veux dire, par exemple. La chaîne "aab" et "abb". Ces deux doivent correspondre à l'expression régulière car ils ont des caractères répétés, le "aa" dans la première chaîne et le "bb" dans la seconde.Expression régulière pour correspondre à plusieurs occurrences d'un caractère

+2

Est-ce que 'aba' est admissible? – Lazer

+0

non, ce ne serait pas. J'utilise ceci pour résoudre un problème d'anagramme et aba pourrait être écrit comme baa ou aab. La première chaîne que j'ai donnée, est la chaîne source et la seconde serait celle qui doit être testée et comme vous pouvez le voir, ce ne sont pas des anagrammes – Zerobu

+0

Comme 'perl' n'a rien à voir avec cette question, j'ai enlevé le' perl 'tag. Si vous avez vraiment besoin de l'avoir, alors expliquez le raisonnement pour l'ajout de la balise 'perl'. – BalusC

Répondre

9

Puisque vous dites « aba » répétition de style ne compte pas, le dos-références devraient faire de cette simple:

(.)\1+ 

trouverais des séquences de caractères. Essayez-le:

java.util.regex.Pattern.compile("(.)\\1+").matcher("b").find(); // false 
java.util.regex.Pattern.compile("(.)\\1+").matcher("bbb").find(); // true 
+0

J'ai copié et collé cela et il semble qu'il y ait une erreur de syntaxe – Zerobu

+0

Qu'avez-vous copié et collé? Notez que lorsque vous utilisez la regex dans une chaîne Java, vous devez échapper certains caractères (voir le code Java que j'ai posté, qui fonctionne pour moi ici). – vanza

+0

J'ai copié le code java que vous avez posté – Zerobu

2

Si vous vérifiez les anagrammes, un algorithme différent pourrait être préférable.

Si vous triez vos chaînes (à la fois l'original et le candidat), la recherche d'anagrammes peut être effectuée avec une comparaison de chaînes.

0
static final String REGEX_MORE_THAN_ONE_OCCURANCE_OF_B = "([b])\\1{1,}"; 
static final String REGEX_MORE_THAN_ONE_OCCURANCE_OF_B_AS_PREFIX_TO_A = "(b)\\1+([a])"; 
Questions connexes