如何使用ruby正则表达式获取子字符串?

如何使用ruby正则表达式获取子字符串?,ruby,regex,string,substring,Ruby,Regex,String,Substring,我想从字符串中提取数字,例如: person\u 3 人34 人_356 城市4 城市15 等等 在我看来,以下措施应该奏效: string[/[0-9]*/] 但这总是吐出一个空字符串 [0-9]*成功匹配字符串开头的“0或更多”数字,因此它返回”[0-9]+将匹配“1个或多个”数字,并按预期工作: irb(main):001:0> x = "test 92" => "test 92" irb(main):003:0> x[/\d*/] => "" irb(main):

我想从字符串中提取数字,例如:

person\u 3
人34
人_356
城市4
城市15

等等

在我看来,以下措施应该奏效:

string[/[0-9]*/]


但这总是吐出一个空字符串

[0-9]*
成功匹配字符串开头的“0或更多”数字,因此它返回
<代码>[0-9]+将匹配“1个或多个”数字,并按预期工作:

irb(main):001:0> x = "test 92"
=> "test 92"
irb(main):003:0> x[/\d*/]
=> ""
irb(main):005:0> x.index(/\d*/)
=> 0
irb(main):004:0> x[/\d+/]
=> "92"

字符串[/.*$/][1..-1]可以工作,但我仍然很好奇为什么仅仅要求[0-9]*不起作用…ruby-VRuby 1.8.7(2009-06-12修补级别174)[i686Linux]这不是因为非贪婪匹配(事实并非如此),而是因为
*
匹配零个或更多字符。它在字符串的开头找到零位,并返回它们。您可以通过在字符串
“34_person”
上尝试相同的正则表达式来测试这一点,
/[0-9]*/
将返回两个数字。这不是贪婪,而是懒惰!多亏了这两个。