2016-01-08 5 views
2

Salut, je me demande s'il y a une expression régulière qui peut faire ce qui suit:Existe-t-il une expression régulière qui renvoie des sous-chaînes d'une chaîne, qui ne correspondent pas à une liste donnée de sous-chaînes spécifiques?

Sélectionner toutes les sous-chaînes d'une chaîne:

  • départ avec & et
  • ont n nombre de caractères après le & (n > = 0)

et ceux NE SONT PAS substrings

  • &
  • '
  • <
  • > ou
  • "

Par exemple, étant donné la chaîne

'Stewie & Brian &partners in crime;' 

Existe-t-il une regex qui retournera uniquement la sous-chaîne &partners?

Mon intuition dit non, parce que j'ai besoin d'une grammaire sans contexte mais comment puis-je prouver cela? Existe-t-il une regex pour le tester avec le lemme de pompage?

Ou une regex existe réellement et mon intuition est juste faux?

Merci

+0

Salut, je me suis permis de reformater votre poste. En plaçant des textes courts entre les guillemets, vous pouvez les formater en code (vous n'avez donc pas besoin d'insérer un espace entre '&' et 'apos;' pour garder le texte littéral). Les textes plus longs et les échantillons de code multiligne peuvent être formatés de cette manière en les indentant de quatre espaces. Les deux peuvent être obtenus en sélectionnant le texte et en appuyant sur Ctrl-K. Vous pouvez consulter l'aide de l'éditeur pour plus d'informations sur ces conseils de mise en forme. En dehors de cela, bienvenue à StackOverflow! –

Répondre

2

Bien sûr:

&(?!(amp|apos|lt|gt);)\S{4,} 

pour n = 4

Voir live demo.

La clé ici est l'aspect négatif avant (?!(amp|apos|lt|gt);), qui affirme (sans entrée consommer) que l'entrée immédiatement suivant ne se pas match de (amp|apos|lt|gt);

+0

merci beaucoup –