2 votes

Match répété 3 fois ou plus

Il s'agit d'un exercice de quiz

J'aimerais savoir si un texte contient des mots avec 4 caractères ou plus qui sont répété 3 fois ou plus dans le texte (n'importe où dans le texte). Si c'est le cas, définissez une (et une seule) référence arrière pour chaque mot.

J'ai essayé le code

(?=\b(\w{4,}+)\b.*\1)

Retour des résultats

Test 10/39 : Ne fonctionne pas, désolé. Relisez la description de la tâche. Il correspond à notword word word word

Essayé

(?=(\b\w{4,}\b)(?:.*\b\1\b){2,})

Test 22/39 : si un certain mot est répété plusieurs fois, vous mettez en place plus d'une référence arrière (erreur courante, je sais). Il n'est pas nécessaire de faire correspondre la première occurrence du mot. Pouvez-vous éviter une correspondance dans >mot< mot mot mot mot, et correspondre au mot >mot< mot mot mot ? (Indice : correspondre s'il est suivi de 2 occurrences, ne pas correspondre s'il est suivi de 3)

Regex démo

7voto

Nick Points 36758

Si je comprends bien votre question, cela devrait faire ce que vous voulez :

(?=(\b\w{4,}\b)(?:.*\b\1\b){2})(?!(\b\w{4,}\b)(?:.*\b\1\b){3})

Il s'agit essentiellement de la même chose que votre expression rationnelle, à savoir la recherche d'un mot de 4 caractères répété, mais avec 2 occurrences supplémentaires (de sorte qu'il apparaisse 3 fois). Les mots qui correspondent seront capturés dans le groupe 1. La regex inclut une anticipation négative pour 3 répétitions, de sorte qu'elle ne correspondra pas deux fois au même mot s'il apparaît 4 fois ou plus.

Démonstration sur regex101

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X