2011-02-24 5 views
1

Ma chaîne de saisie peut être au format TIM0.VW0 (elle commence toujours par TIM ou CNT ou ENC suivi de chiffres, puis pointe toujours et à la fin char ou chars avec chiffre à la fin). Comment savoir si ma chaîne entrante correspond à ceci avec regex?Problème de correspondance REGEX

Répondre

0

Vous pouvez essayer cette regex: (TIM|CNT|ENC)\d+\.\w+\d

1

match contre:

^(TIM|CNT|ENC)[0-9]+\.[A-Z]+[0-9]$ 
+0

Si vous utilisez 'String.matches' vous n'avez pas besoin de'^'et' $ '. – aioobe

+0

@aioobe - c'est pourquoi vous avez voté - vous avez un exemple Java qui fonctionne. – Kobi

4

Quelque chose comme cela pourrait faire:

import java.util.Arrays; 

public class Test { 
    public static void main(String[] args) { 

     String regexp = "(TIM|CNT|ENC)\\d+\\.\\p{Alpha}+\\d"; 

     for (String test : Arrays.asList("TIM0.VW0", "TIM0.VW5", "TIM0.0", 
             "TIM99.A5", "CNT0VW0", "ABC0.VW0", 
             "-TIM0.VW0", "TIM9.8x", "ENC0.55")) 
      System.out.printf("%-10s: %s%n", test, test.matches(regexp)); 
    } 
} 

Sortie:

TIM0.VW0 : true 
TIM0.VW5 : true 
TIM0.0 : false 
TIM99.A5 : true 
CNT0VW0 : false 
ABC0.VW0 : false 
-TIM0.VW0 : false 
TIM9.8x : false 
ENC0.55 : false 
+0

Si les caractères après le point sont toujours en majuscules, vous pouvez utiliser \ p {Upper} (ou [A-Z]) plutôt que \ p {Alpha}. –

+0

Oui. Bon point. – aioobe

0

Vous devriez co nsider en utilisant ceci:

^(TIM|ENC|CNT)\d+\.\w+\d+$