TLDR ; (?<=[^x]|^)(x{n}|x{m})(?:[^x]|$)
On dirait que vous voulez "x n fois" ou "x m fois", je pense qu'une traduction littérale en regex serait (x{n}|x{m}).
Comme ceci https://regex101.com/r/vH7yL5/1
ou, dans le cas où vous pouvez avoir une séquence de plus de m "x" (en supposant que m > n), vous pouvez ajouter "suivi d'aucun "x"" et "suivi d'aucun "x", ce qui se traduit par [^x](x{n}|x{m})[^x]
mais cela supposerait qu'il y ait toujours un personnage derrière et après les "x". Comme vous pouvez le voir ici : https://regex101.com/r/bB2vH2/1
vous pouvez le remplacer par (?:[^x]|^)(x{n}|x{m})(?:[^x]|$)
ce qui se traduit par "suivant pas de 'x' ou suivant le début de la ligne" et "suivi par pas de 'x' ou suivi par la fin de la ligne". Cependant, il ne fera pas correspondre deux séquences avec seulement un caractère entre elles (parce que la première correspondance nécessiterait un caractère après, et la seconde un caractère avant), comme vous pouvez le voir ici : https://regex101.com/r/oC5oJ4/1
Enfin, pour faire correspondre le caractère éloigné, vous pouvez ajouter un regard positif avant (?=) sur le "pas de 'x' après" ou un regard positif arrière (?<=) sur le "pas de 'x' avant", comme ceci : https://regex101.com/r/mC4uX3/1
(?<=[^x]|^)(x{n}|x{m})(?:[^x]|$)
De cette façon, vous n'obtiendrez que le nombre exact de "x" que vous souhaitez.
0 votes
Non. Deux occurrences de
X
est ce qu'il y a de mieux pour lesm
,n
.1 votes
Si c'était mon problème, j'essaierais d'utiliser les références inverses des expressions rationnelles et je commencerais par
(X)\1{n-1}(?:\1{m-n-1})
. Je sais que cela correspondX
au moins une fois, mais pour commencer, essayez cette chose simple, puis affinez en utilisant des "lookaheads" ou des "lookbehinds" au lieu de "lookaheads".(X)
.