2012-03-24 171 views
1

的范围之前我有2个字符串:Ruby的正则表达式匹配的字符串与数字

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

我们如何使用红宝石(1.9.3)的正则表达式来检查只有1到10辆匹配?

例:

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 

此外,我们该如何匹配(即2辆)针对任何字符串?所以如果目标字符串包含'22辆汽车',那么它不应该匹配。

例:

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

'/我有(1辆车| [2-9]车| 10辆车)在我家/'? – Howard 2012-03-24 16:46:56

+1

你的车不应该在你的车库? :D霍华德提供了正确的答案。我第一次错过了单数形式。 – alfa 2012-03-24 16:51:00

回答

1

正则表达式:/I have (?:1 car|[2-9] cars|10 cars) in my house/

您可以在http://rubular.com/

的尝试interatively(?:XXX),使括号非获取的陈述here

+0

完美地工作,谢谢大家!其实,我的问题是我有一个字符串(即2辆车),我想检查它是否匹配任何字符串包含'2辆车'。所以在这种情况下,如果目标字符串包含'22辆汽车',那么它不应该匹配。 – 2012-03-26 03:06:42

+0

使用*可匹配汽车数量前后的任何字符串。 – alfa 2012-03-26 07:56:01

+0

这仍然匹配字符串“我家有22辆汽车”。 – 2012-03-26 09:15:32

1

使用该正则表达式:/I have ([1-9]|10) cars? in my house./

[1-9]创建一个范围的1,2,3,4,5,6,7,8,9和管道字符充当or以允许10.括号是一个捕获组。汽车尾部的's'后面的问号意味着“零个或一个前面的字符”,因此匹配'汽车'和'汽车'。希望这有助于!

+0

这个解决方案比我的更简单。它的缺点是“我家有10辆车。”或“我家有一辆车。”比赛。列出的用例已足够,但我认为这不是Hoang Nghiem所期望的。 ;)Btw:。匹配任何字符。它应该是 \。 – alfa 2012-03-24 17:02:10

+0

这是真的 - 好赶上!圆括号的好处是不捕获的,但是呢? – 2012-03-24 17:04:04

+0

如果您只想知道整句是否匹配,并且不在意数字,您应该这样做。也许你想在后面的正则表达式中捕获其他东西,并且不想与索引混淆。 – alfa 2012-03-24 17:08:18