String :: scan with string参数表现得很奇怪

时间:2013-09-10 06:18:24

标签: ruby regex string

根据documentation#scan应接受StringRegexp个实例作为参数。但测试显示出奇怪的行为:

▶ cat scantest.rb 
#!/usr/bin/ruby
puts '='*10
puts 'foo'.scan '.'
puts '='*10
puts 'foo'.scan /./
puts '='*10

▶ rb scantest.rb
# ⇒ ==========
# ⇒ ==========
# ⇒ f
# ⇒ o
# ⇒ o
# ⇒ ==========

pryirb内部,它也无法正确扫描字符串。我做错了什么?

2 个答案:

答案 0 :(得分:2)

使用字符串'.',它会扫描文字点:

'foo'.scan '.'
# => []
'fo.o'.scan '.'
# => ["."]

使用正则表达式/./时,它匹配任何字符(换行符除外):

'foo'.scan /./
# => ["f", "o", "o"]
"foo\nbar".scan /./
# => ["f", "o", "o", "b", "a", "r"]

答案 1 :(得分:0)

您的scan应该有parameter与您想要的字符串scan相匹配,否则它将返回空的arrray

我的情况:

irb(main):039:0> "foo".scan("o")
=> ["o", "o"]

你的案子

   'foo'.scan '.'
    # => []

.字符串中没有点'foo',因此scan返回empty array