Je veux faire correspondre quelque chose comme aaaa, aaaad, adjjjjk. Quelque chose comme ([a-z]) \ 1+ a été utilisé pour faire correspondre les caractères répétés, mais je ne suis pas capable de comprendre cela pour quatre lettres.Regex pour faire correspondre quatre lettres répétées dans une chaîne en utilisant un modèle Java
Répondre
Ne sachant pas sur la syntaxe de répétition finie, votre propre résolution de problèmes de compétences devrait vous conduire à ceci:
([a-z])\1\1\1
Il est évident que ce n'est pas jolie, mais:
- Il fonctionne
- Il exerce votre propre capacité à résoudre des problèmes
- Cela peut vous mener à une meilleure compréhension des concepts
- Dans ce cas, connaissant la forme Dessucré de la syntaxe de répétition finie
Hey gars cool réponses mais j'ai une préoccupation
"ffffffff".matches("([a-z])\\1{3,}") = true
"fffffasdf".matches("([a-z])\\1{3,}") = false
"asdffffffasdf".matches("([a-z])\\1{3,}") = false
Que puis-je faire pour les deux derniers?
Le problème est que dans Java, matches
doit correspondre à la chaîne entière; c'est comme si le motif était entouré de ^
et $
.
Malheureusement il n'y a pas String.containsPattern(String regex)
, mais vous pouvez toujours utiliser cette astuce d'entourer le motif avec .*
:
"asdfffffffffasf".matches(".*([a-z])\\1{3,}.*") // true!
// ^^ ^^
Si vous essayez de faire correspondre une chaîne où la chaîne que vous recherchez est juste avant un caractère de fin de ligne, le modèle ci-dessus ne correspondra pas. (J'ai appris ça à la dure!). Vous pouvez faire: '"asdfffffffffasf" .matches (". * ([Az]) \\ 1 {3,} (? S). *")' Où '(? S)' déclenche la recherche des caractères de fin de ligne . – seinecle
il est préférable de trouver le caractère répétitif. –
Je recherche cela depuis 2 heures. Merci beaucoup –
Vous voulez faire correspondre un seul caractère et ce caractère répété trois fois:
([a-z])\1{3}
Remarque: Java dont vous avez besoin pour les backslashs dans vos expressions régulières.
Mise à jour: La raison pour laquelle il ne fait pas ce que vous voulez parce que vous utilisez la méthode matches
qui exige que la chaîne correspond exactement à l'expression régulière, non seulement qu'il contient l'expression régulière. Pour vérifier l'endiguement, vous devez utiliser la classe Matcher
. Voici quelques exemples de code:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
class Program
{
public static void main(String[] args)
{
Pattern pattern = Pattern.compile("([a-z])\\1{3}");
Matcher matcher = pattern.matcher("asdffffffasdf");
System.out.println(matcher.find());
}
}
Résultat:
true
Vous pouvez mettre {n}
après quelque chose pour le match n
fois, donc:
([a-z])\1{3}
Schéma général regex pour la répétition pré-définies est {4}
.
Ainsi ici ([a-z]) \ 1 {3} devrait correspondre à vos 4 caractères.
Hé les gars réponses fraîches mais j'ai une préoccupation « FFFFFFFF » .matches ("([az ]) \\ 1 {3,} ") = true " fffffasdf ".matches (" ([az]) \\ 1 {3,} ") = faux " asdffffffasdf ".matches (" ([az]) \\ 1 {3,} ") = false Que puis-je faire pour les deux derniers? –