xmpfilter的结果
doc.search('.noimage p:nth-child(5)') do |kaipan|
x = kaipan.to_s
x.scan(/[\w\d_-]+@[\w\d_-]+\.[\w\d._-]+/) #=> # !> character class has duplicated range: /[\w\d_-]+@[\w\d_-]+\.[\w\d._-]+/
end
如果我不使用{do~end},那就是我的预期。就像下面这样。
[9] pry(main)> doc.search('.noimage p:nth-child(5)').to_s.scan(/[\w\d_-]+@[\w\d_-]+\.[\w\d._-]+/)
=> ["xxxxxx@live.jp"]
在这里发帖让我再次意识到我吮吸英语......哈哈 我是日本人。 这是我的第一篇Stackoverflow文章。
答案 0 :(得分:1)
警告消息(这是警告而非错误,只有在启用警告时才会看到它)是character class has duplicated range
。正则表达式中的字符类是[...]
内的内容,因此在您的情况下是[\w\d_-]
,并且警告告诉您它具有“重复范围”。这意味着字符类的一部分是指定另一部分指定的相同字符。
如果我们将课程分解为部分,\w
与[a-zA-Z0-9_]
相同(请参阅the Regexp docs),\d
与[0-9]
相同}。但0-9
中已包含\w
,因此此范围是重复的,这是警告告诉您的内容。 _
中也包含\w
,因此您可以将\d
和_
退出正则表达式并将其更改为[\w-]
,这应该具有相同的效果没有警告。
另请注意,-
是字符类中的元字符,所以虽然它似乎在这里工作,但您可能更安全地逃避它:[\w\-]
。