2009-04-28 8 views
0

Je voudrais un peu d'aide pour détecter les expressions suivantes avec RegExRegex pour voir

string "(x/x)" où x est un nombre 0-999. chaîne "x de x" où x est un nombre compris entre 0 et 999.

Typiquement, la chaîne est un marqueur pour un ensemble, c'est-à-dire 4 sur 10 choses, ou (3/5) où le premier nombre est l'article et le second nombre est le total.

Merci

+1

quelle langue? ou quelle saveur de regex? – hometoast

Répondre

1

Que diriez-vous

"\ d {1,3}/\ d {1,3}"

et

« \ d {1,3} de \ d {1,3} »

+0

Ça a l'air bien. Laissez-moi essayer avant de le marquer. Merci – Jordan

+1

Cela correspond à 000 et autres, ce qui peut ou peut ne pas être acceptable. Et en Perl 5.8 et 5.10 \ d va correspondre à des choses qui ne sont pas [0-9] (comme MONGOLIAN DIGIT 5 U + 1815) –

+0

Bon point./d peut ne pas être aussi explicite que j'en ai besoin. Merci – Jordan

1
\([0-9]+\/[0-9]+\) 

et

[0-9]+ of [0-9]+ 
+0

Cela correspond à 000 et autres, ce qui peut ou peut ne pas être acceptable. –

1

Voir How to match numbers between X and Y with regexp?.

#!/usr/bin/perl 

use strict; 
use warnings; 

my $num_re = qr/[0-9]|[1-9][0-9]|[1-9][0-9]{2}/; 
for my $s qw(1/10 100/500 a/456) { 
    if (my ($x, $y) = $s =~ m{^($num_re)/($num_re)$}) { 
     print "x is $x and y is $y\n"; 
    } else { 
     print "$s does not match\n"; 
    } 
} 

ou tout simplement

^([0-9]|[1-9][0-9]|[1-9][0-9]{2})\/([0-9]|[1-9][0-9]|[1-9][0-9]{2})$ 

si vous ne me dérange pas violer DRY.