2010-01-31 7 views
4

J'ai besoin de savoir si une chaîne correspond à un certain nombre de critères différents. J'essaie de résoudre ceci en utilisant une expression régulière et ensuite voir si elle correspond (en Java: str.matches (myRegex);), mais je ne peux pas le faire correctement.Aide à la construction de regex

Les critères sont les suivants:

  • La chaîne pour correspondre est constitué de 4 lettres, [AZ]
  • Il peut être précédé (mais pas nécessairement) par l'un des "-", « + »ou "VC"
  • Il doit seulement correspondre à des chaînes contenant exactement 4 lettres (et les caractères éventuellement) précédant

Exemples:

  • "SHSN" -> Match
  • "+ SHRA" -> Match
  • "VCSHRA" -> Match
  • "CAVOK" -> pas de match
  • "- + SHSN" -> pas match

Est-ce possible de faire une seule regex? Ou devrait-il être fait dans le code ou une combinaison des deux?

Merci,

Linus

Répondre

7

Essayez cette expression régulière:

^([+-]|VC)?[A-Z]{4}$ 
+2

+1. Mais j'en ferais un groupe non-capturant s'il n'en a pas besoin pour capturer: '^ (?: [+ -] | VC)? [A-Z] {4} $' –

+0

Excellent, merci! Je ne connais pas le terme «capturer des groupes», mais je vais le rechercher. – aspartame

+0

@aspartame: Les correspondances des groupes non-captureurs ne peuvent pas être référencées. Donc vous ne pouvez pas utiliser 'group (1)' pour obtenir la correspondance de '(?: [+ -] | VC)?'. – Gumbo