Ruby (1.9.3) 文档似乎暗示 scan 等同于 =~ 除了
- scan 返回多个匹配项,而 =~ 仅返回第一个匹配项,并且
- scan 返回匹配数据,而 =~ 返回索引。
但是,在下面的示例中,这两种方法似乎对相同的字符串和表达式返回不同的结果。这是为什么?
1.9.3p0 :002 > str = "Perl and Python - the two languages"
=> "Perl and Python - the two languages"
1.9.3p0 :008 > exp = /P(erl|ython)/
=> /P(erl|ython)/
1.9.3p0 :009 > str =~ exp
=> 0
1.9.3p0 :010 > str.scan exp
=> [["erl"], ["ython"]]
如果第一个匹配的索引是 0,扫描不应该返回“Perl”和“Python”而不是“erl”和“python”吗?
Thanks
当给定一个不捕获组的正则表达式时,scan
将返回一个字符串数组,其中每个字符串代表正则表达式的匹配。如果你使用scan(/P(?:erl|ython)/)
(这与你的正则表达式相同,除了没有捕获组),你会得到["Perl", "Python"]
,这正是您所期望的。
然而,当给定带有捕获组的正则表达式时,scan
将返回一个数组数组,其中每个子数组包含给定匹配的捕获。所以如果你有例如正则表达式(\w*):(\w*)
,您将得到一个数组数组,其中每个子数组包含两个字符串:冒号之前的部分和冒号之后的部分。在您的示例中,每个子数组都包含一个字符串:匹配的部分(erl|ython)
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)