2009-02-26 4 views

Répondre

4
^tcm:\d{8}-(\d{9}|\d{8}-\d{8})$ 

C'est soit tcm: (huit chiffres) - (neuf chiffres) ou tcm: (huit chiffres) - (huit chiffres) - (huit chiffres)


^tcm:\d+(-\d+){1,2}$ 

Si vous re la recherche soit tcm: (certains chiffres) - (certains chiffres) ou tcm: (certains chiffres) - (certains chiffres) - (quelques chiffres)

+0

Salut patrick, ce n'est pas constant, il peut y avoir n'importe quel nombre entre, minimum il peut être tcm: 0-0 et max peut être tcm: 0-0-0 –

0

Voulez-vous dire:

tcm: [\ d -] +

?

+0

minimum, il devrait être tcm: 2323-32232 et maximum peut être tcm: 2323-2323-23223, je veux dire au minimum tcm: 0-0 et max tcm: 0-0-0 –

+0

tcm: somedigits-somedigits-64? –

2

Essayez celui-ci, qui nécessite deux groupes ou trois groupes

tcm:\d+-\d+(-\d+)? 

S'il y a des restrictions sur la lenht des chiffres, essayer quelque chose comme:

tcm:\d{4,8}-\d{4,8}(-\d{4,8})? 

(où 4 et 8 est le minimum et maximum pour chaque groupe)

+0

qu'en est-tcm: somedigits-somedigits-64? –

+0

@Manoj dans ce cas changer les derniers 4,8 à 2,8 ou tout ce qui est nécessaire –

+0

changer les derniers 4,8 pour convenir - le 4 est le nombre minimum de chiffres, et 8 est le maximum pour un groupe. De même, vous pouvez utiliser la première option, qui a au moins un chiffre dans chaque groupe, le dernier groupe étant facultatif –

0

Eh bien, un tiret dans la milieu d'un nombre est non numérique ...;)

Voici quelques options:

Si les tirets sont facultatifs:

^tcm:[\d\-]+$ 

Si les tirets sont facultatifs, mais ne peut pas se produire premier ou dernier:

^tcm:\d[\d\-]*\d$ 

Si au moins un tableau de bord est nécessaire:

^tcm:\d*-[\d\-]+$ 

Si au moins un tableau de bord est nécessaire, mais ne peut pas apparaître en premier ou en dernier:

^tcm:\d+-[\d\-]*\d$ 

Si les tirets sont facultatifs, mais ne peuvent pas apparaître premier ou dernier ou à côté de l'autre:

^tcm:\d+(-\d+)*$ 
+0

tcm: somedigits-somedigits-64? –

+0

Que voulez-vous dire? – Guffa

0

Je ne sait pas si vous voulez valider l'entrée et juste correspondance l'entrée ou si vous voulez extraire les données.

Si vous avez juste besoin de faire correspondre l'entrée pour le valider, puis:

^tcm:\d+(-\d+){1,2}$ 

ne correspondra s'il y a 2 ou 3 groupes de chiffres, pas moins, pas plus.

Si vous devez tenir compte des espaces qui peuvent se produire, vous pouvez modifier l'expression régulière comme ceci:

^tcm\s*:\s*\d+\s*(-\s*\d+){1,2}\s*$ 

Si vous voulez extraire chaque ensemble de chiffres:

  • En Perl, vous utiliseriez le tableau @result qui contiendrait 2 ou 3 groupes de chiffres uniquement si le modèle entier correspondait (la chaîne subject contient la ligne dont vous voulez extraire les données).

    my @result = $subject =~ /^tcm:(\d+)-(\d+)(?:-(\d+))?$/; 
    
  • En C#, vous pouvez faire la chose équivalente:

    MatchCollection results = null; 
    Regex r = new Regex(@"^tcm:(\d+)-(\d+)(?:-(\d+))?$"); 
    results = r.Matches(subject); 
    if ((results.Count == 2) || ((results.Count == 3))) { 
        // use results.Item[] to access each group of digits 
    } else { 
        // The subject doesn't match 
    } 
    
Questions connexes