Comment puis-je faire correspondre le 'x' qui a un nombre pair de 'G' avant lui?
Par exemple:
(?<!G(GG)*)x
Ici, j'essaye d'utiliser "Nagative Look Behind ":
x --> Match the 'x' Gx --> Match nothing GGx --> Match the 'x' GGGx --> Match nothing GGGGx --> Match the 'x' ...
Mais le quantificateur * à l'intérieur du lookbehind lui donne une largeur non fixe, donc ce modèle est faux.
Alors, comment puis-je faire?
4 Réponses :
Est-ce ce que vous recherchez?
(^|[^G](G{2})+)(x)
Le groupe de correspondance 3 devrait vous donner le x
Vous pouvez utiliser cette expression régulière,
\b(?:[Gg]{2})*\K[xX]\b
Ici \ b garantit que le mot ne correspond pas partiellement et (?: [Gg] {2} ) * garantit que seul le nombre pair de G précédant x est mis en correspondance et que l'opérateur de réinitialisation de correspondance \ K garantit uniquement x correspond et non la chaîne entière.
Au lieu d'utiliser Au lieu de cela, si vous affirmez que ce qui est à gauche n'est pas un Enfin, utilisez (? où le quantificateur est dans le lookbehind, vous pouvez déplacer le (GG) hors du lookbehind et transformez-le en un groupe non capturant et répétez cela plus de 0 fois (?: GG) * G , vous pouvez affirmer qu'il ne s'agit pas d'un caractère non blanc en utilisant \ S car (? signifie qu'un "a" est valide et correspondra au x dans ax \ K pour oublier ce qui a été mis en correspondance et faire correspondre un x (?<!\S)(?:GG)*\Kx
Quel langage de programmation ou quel outil utilisez-vous?
@blhsing J'utilise PHP.
\ b (?: G {2}) * \ Kxa >