1
votes

Correspond au 'x' qui a un nombre pair de 'G' devant lui

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?


3 commentaires

Quel langage de programmation ou quel outil utilisez-vous?


@blhsing J'utilise PHP.


\ b (?: G {2}) * \ Kx


4 Réponses :


0
votes

Est-ce ce que vous recherchez?

(^|[^G](G{2})+)(x)

Le groupe de correspondance 3 devrait vous donner le x


0 commentaires


2
votes

Vous pouvez essayer ce modèle:

(?<!G)(GG)*(?!G)(x)

Le x sera dans le groupe 2. Démo


0 commentaires

1
votes

Au lieu d'utiliser (? 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) *

Au lieu de cela, si vous affirmez que ce qui est à gauche n'est pas un 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

Enfin, utilisez \ K pour oublier ce qui a été mis en correspondance et faire correspondre un x

(?<!\S)(?:GG)*\Kx

Démo Regex


0 commentaires