xmpfilter 的结果
doc.search('.noimage p:nth-child(5)') do |kaipan|
x = kaipan.to_s
x.scan(/[wd_-]+@[wd_-]+.[wd._-]+/) #=> # !> character class has duplicated range: /[wd_-]+@[wd_-]+.[wd._-]+/
end
如果我不使用{do~end},这正是我所期望的。
[9] pry(main)> doc.search('.noimage p:nth-child(5)').to_s.scan(/[wd_-]+@[wd_-]+.[wd._-]+/)
=> ["xxxxxx@live.jp"]
在这里发帖让我再次意识到我的英语很差。。。英雄联盟我是日本人。这是我的第一篇文章。
警告消息(这是一个警告而不是错误,只有在启用警告时才会看到)是character class has duplicated range
。正则表达式中的字符类是[...]
中的内容,因此在您的情况下,它是[wd_-]
,并且警告告诉您它有一个"重复范围"。这意味着字符类的一部分指定与另一部分指定的字符相同的字符。
如果我们将类分解为几个部分,w
与[a-zA-Z0-9_]
相同(请参阅Regexp文档),d
与[0-9]
相同。但是0-9
已经包含在w
中,所以这个范围是重复的,这就是警告告诉你的。_
也包含在w
中,因此您可以将d
和_
排除在正则表达式之外,并将其更改为[w-]
,这应该具有相同的效果,没有任何警告。
还要注意,-
是字符类中的元字符,因此,虽然它在这里似乎有效,但您可能更安全地逃离它:[w-]
。