我是 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
的次品吗?
最佳答案
简短回答:扫描
将返回所有匹配项。这并不能使它更好,因为如果你只想要第一个匹配项,str.match[2]
比 str.scan[0][1]
读起来更好.
ruby-1.9.2-p290 :002 > 'a 1-night stay, a 2-night stay'.scan(/(a )?(\d*)[- ]night/i).to_a
=> [["a ", "1"], ["a ", "2"]]
ruby-1.9.2-p290 :004 > 'a 1-night stay, a 2-night stay'.match(/(a )?(\d*)[- ]night/i).to_a
=> ["a 1-night", "a ", "1"]
关于ruby - Ruby 字符串上的扫描和匹配有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7993662/