我是Ruby新手,一直使用String.scan
来搜索第一个出现的数字。返回值是嵌套数组,这有点奇怪,但我只是去[0][0]
寻找我想要的值。(我相信它有它的用途,只是我还没有使用它。)
我刚刚发现有一个String.match
方法。而且它似乎更方便,因为返回的数组不是嵌套的。
下面是两个例子,第一个是扫描:
>> 'a 1-night stay'.scan(/(a )?(\d*)[- ]night/i).to_a
=> [["a ", "1"]]
字符串
则匹配
>> 'a 1-night stay'.match(/(a )?(\d*)[- ]night/i).to_a
=> ["a 1-night", "a ", "1"]
型
我已经检查了API,但我不能真正区分差异,因为两者都提到了“匹配模式”。
出于好奇,这个问题是关于scan
能做什么而match
不能做什么,反之亦然。任何只有一个能完成的特定场景?match
比scan
差吗?
3条答案
按热度按时间yyyllmsg1#
简短的回答:
scan
将返回所有匹配项。这并不意味着它具有上级的性能,因为如果你只需要第一个匹配项,str.match[2]
的读取效果要比str.scan[0][1]
好得多。字符串
ttisahbt2#
#scan
返回Regex匹配的所有内容。#match
将第一个匹配作为MatchData
对象返回,其中包含由特殊变量保存的数据,如$&
(Regex匹配的内容;Map到索引0的内容),$1
(匹配1),$2
等。waxmsbnn3#
以前的答案指出,扫描将返回从字符串中调用方法的每个匹配,但这是不正确的
string类的scan方法迭代字符串并返回非重叠匹配
字符串