2017-09-07 4 views
0

J'ai lu plusieurs tutoriels sur regex et j'ai essayé le testeur regex en ligne, mais je n'arrive pas à trouver la regex appropriée pour les matchs auxquels je l'aimerais tirer sur.
J'apprécierais aide à la création d'une expression régulière qui se traduit par vrai lorsqueregex - filtre pour contenir des chaînes, sauf si contient une autre chaîne spécifique

  • la chaîne donnée contient « AI [num] » où [num] est un entier. Il peut y avoir quelque chose devant ou après cela, même "DAI 5b" devrait correspondre. Cependant, la chaîne donnée ne doit pas renvoyer true lorsqu'elle contient "AI 2", à nouveau avec tout ce qui précède ou après cela autorisé.
  • si aucune de ces situations sont le cas, il devrait renvoyer false

Cela signifierait que

  • "blabla blabla" => false
  • "blabla AI 6" => true
  • "blabla AI 4b" => true
  • "blabla AI 2" => false
  • "blabla AI 2b" => false
  • "AI 6 blabla blabla AI 2b" => false

J'espère vraiment que quelqu'un pourrait me diriger dans la bonne direction!

Répondre

1

Vous pouvez utiliser cette regex:

AI (?!2)\d+(?!.*AI) 

RegEx Demo

RegEx Breakup:

  • AI: match AI suivi d'un espace
  • (?!2): Utilisation asse préanalyse négative rt que nous n'avons 2 à la position suivante
  • \d+: Faites correspondre un ou plusieurs chiffres
  • (?!.*AI): L'utilisation d'un négatif préanalyse assurez-vous que nous n'avons pas une autre AI avant

Avec MULTILINE modificateur, vous pouvez utiliser ce regex ainsi:

^(?!.*AI 2).*AI \d+ 

RegEx Demo 2

+1

Incroyable merci! Je vais marquer dans quelques minutes – Isaiah