2012-03-24 17 views
1

Ich habe 2 Strings:Ruby-Regex passender String mit Zahlenbereich vorangestellt

I have 4 cars in my house 
I have 14 cars in my house 

Wie verwenden wir Rubin (1.9.3) Regex nur 1 bis 10 Auto überprüfen abgestimmt sind?

Ex:

I have 1 car in my house # => match 
I have 4 cars in my house # => match 
I have 10 cars in my house # => match 
I have 14 cars in my house # => should not match 
I have 100 cars in my house # => should not match 

Auch, wie passen wir (das heißt 2 Autos) gegen alle Saiten? Wenn die Zielzeichenfolge "22 Autos" enthält, sollte sie nicht übereinstimmen.

Ex:

some other string before 2 cars some other string after # => match 
some other string before 22 cars some other string after # => should not match  
+2

Was ist mit '/ Ich habe (1 Auto | [2-9] Autos | 10 Autos) in meinem Haus /'? – Howard

+1

Sollten Ihre Autos nicht in Ihrer Garage sein? : D Howard gibt die richtige Antwort. Ich habe zuerst die Singularform verpasst. – alfa

Antwort

1

Regulärer Ausdruck: /I have (?:1 car|[2-9] cars|10 cars) in my house/

Sie können versuchen, dass iterativ bei http://rubular.com/

The (?: Xxx) macht Klammer nicht-Capturing als here angegeben.

+0

Funktioniert perfekt, danke allen! Eigentlich ist mein Problem, ich habe eine Zeichenfolge (d. H. 2 Autos) und ich möchte überprüfen, ob es gegen irgendwelche Zeichenfolgen "2 Autos" enthält. Wenn in diesem Fall die Zielzeichenfolge "22 Autos" enthält, sollte sie nicht übereinstimmen. –

+0

Verwenden Sie. *, Um eine beliebige Zeichenfolge vor und nach der Anzahl der Autos zu finden. – alfa

+0

Dies entspricht immer noch der Saite "Ich habe 22 Autos in meinem Haus". –

1

verwenden RegExp: /I have ([1-9]|10) cars? in my house./

Die [1-9] schafft eine Reihe von 1,2,3,4,5,6,7,8,9 und das Rohr Charakter wirkt als or für 10. Die ermöglichen Klammern sind eine Fanggruppe. Das Fragezeichen nach dem "s" am Ende der Autos bedeutet "null oder eins des vorhergehenden Charakters" und entspricht daher sowohl "Auto" als auch "Autos". Hoffe das hat geholfen!

+0

Diese Lösung ist einfacher als meins. Es hat den Nachteil, dass "ich 10 Autos in meinem Haus habe." oder "Ich habe 1 Autos in meinem Haus." Spiel. Es ist ausreichend für die aufgeführten Anwendungsfälle, aber ich denke nicht, dass Hoang Nghiem dies beabsichtigt hat. ;) Übrigens:. passt auf ein beliebiges Zeichen. Es sollte sein \. – alfa

+0

Das stimmt - guter Fang! Was ist der Vorteil der Klammer, die nicht erfasst wird? –

+0

Wenn Sie nur wissen wollen, ob der ganze Satz übereinstimmt und sich nicht um die Nummer kümmert, sollten Sie dies tun. Vielleicht möchten Sie später etwas anderes in der Regexp erfassen und wollen nicht mit den Indizes verwechselt werden. – alfa

Verwandte Themen