2009-04-28 4 views
0

würde ich etwas Hilfe zur Erfassung der folgenden Ausdrücke mit RegExRegex für Satz

string „(x/x)“, wobei x eine beliebige Zahl von 0 bis 999. Zeichenfolge "x of x" wobei x eine beliebige Zahl von 0-999 ist.

In der Regel ist die Zeichenfolge eine Markierung für einen Satz, d. H. 4 von 10 Dingen, oder (3/5) wobei die erste Zahl der Gegenstand und die zweite Zahl der Gegenstand ist.

Dank

+1

Welche Sprache? oder welcher Geschmack von Regex? – hometoast

Antwort

1

Wie wäre es

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

und

„\ d {1,3} von \ d {1,3}“

+0

Sieht gut aus. Lass es mich ausprobieren, bevor ich es ankreuze. Danke – Jordan

+1

Dies entspricht 000 und dergleichen, die möglicherweise nicht akzeptabel sind. Und in Perl 5.8 und 5.10 \ d passt Dinge, die nicht [0-9] (wie MONGOLIAN DIGIT 5 U + 1815) –

+0

Guter Punkt./d ist vielleicht nicht so explizit, wie ich es brauche. Danke – Jordan

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

und

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

Dies entspricht 000 und dergleichen, die möglicherweise akzeptabel sind oder nicht. –

1

Siehe 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"; 
    } 
} 

oder nur

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

wenn Sie nichts dagegen nicht DRY zu verletzen.