ruby - Ruby 字符串上的扫描和匹配有什么区别

标签 ruby regex

我是 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 不能,反之亦然。有什么只有一个人可以完成的特定场景吗? matchscan 的次品吗?

最佳答案

简短回答:扫描 将返回所有匹配项。这并不能使它更好,因为如果你只想要第一个匹配项,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/

相关文章:

ruby-on-rails - Heroku Rake 任务不理解 rand 方法

ruby - 如何为一次性 rake 任务覆盖 ruby​​ 中的方法?

ruby-on-rails - 在我的应用程序上使用 Devise 注销时出现问题

javascript - 正则表达式以验证特殊字符集

php - 从 Python 脚本解析 PHP 文件变量

php - PHP中的iframe与来自SQL的字符串

regex - Coldfusion RegEx 检查密码强度

python 正则表达式问题,?操作

ruby-on-rails - 如何在ruby中解析字符串中最后一组括号之间的子字符串

ruby - 任务钩子(Hook)前 rake