Je veux tester une chaîne qui contient le motif \ [[A-Z] + \]. Mais s'il y a un - avant cela, la chaîne ne devrait pas passer. Réussir le test [GET] test test [POST] test test [POST] --test test [GET] test --test [...

1
Hao Wu 15 mars 2021 à 10:52

3 réponses

Meilleure réponse

Vous pouvez utiliser cette expression régulière:

^(?:(?!--).)*\[[A-Z]+\]

Démo RegEx

Détails RegEx:

  • ^: Démarrer
  • (?:: démarrer un groupe sans capture
    • (?!--): Recherche négative pour affirmer que nous n'avons pas --
    • .: correspond à n'importe quel caractère
  • )*: terminer le groupe non capturé. Correspond à 0 ou plus de ce groupe
  • \[[A-Z]+\]: correspond à [ suivi de majuscules suivi de ]

Alternativement , vous pouvez également utiliser cette expression régulière avec les verbes PCRE (*SKIP)(*FAIL):

--.*\[[A-Z]+\](*SKIP)(*F)|[[A-Z]+\]

RegEx Demo 2

3
anubhava 15 mars 2021 à 08:44

Une autre option pourrait être

^[^-[]*(?:(?:\[(?![A-Z]+])|-(?!-))[^-[]*)*\[[A-Z]+]

Le motif correspond:

  • ^ Début de chaîne
  • [^-[]* Éventuellement correspondre à n'importe quel caractère sauf [ et -
  • (?: Groupe sans capture
    • (?: Groupe sans capture
      • \[(?![A-Z]+]) Match [ lorsqu'il n'est pas directement suivi de A-Z]
      • | Ou
      • -(?!-) Correspondance - lorsqu'il n'est pas directement suivi de -
    • ) Fermer le groupe sans capture
    • [^-[]* Faire correspondre éventuellement n'importe quel caractère sauf [ et -
  • )* Fermez le groupe sans capture et répétez-le éventuellement
  • \[[A-Z]+] Faire correspondre 1+ caractères A-Z entre crochets

Démo Regex

2
The fourth bird 15 mars 2021 à 08:58

Je pense que vous avez besoin d'un regard négatif en arrière:

(?<!--.*)\[[A-Z]+\]

Regardez par exemple à https://www.freeformatter.com/regex-tester.html

https://regex101.com/ ne fonctionne pas pour cela.

0
Andy U. 15 mars 2021 à 08:17