0

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 上的第一篇文章。

4

1 回答 1

1

警告消息(它是警告而不是错误,只有在启用警告时才会看到它)是character class has duplicated range. 正则表达式中的字符类是 内部的内容[...],因此在您的情况下是[\w\d_-],并且警告告诉您它具有“重复范围”。这意味着字符类的一部分指定另一部分指定的相同字符。

如果我们将类分解成各个部分,\w则与[a-zA-Z0-9_](参见Regexp 文档\d相同,并且与[0-9]. 但是0-9已经包含在 中\w,所以这个范围是重复的,这就是警告告诉你的。_也包含在 中\w,因此您可以离开\d_退出您的正则表达式并将其更改为[\w-],这应该具有相同的效果而没有警告。

另请注意,这-是字符类中的元字符,因此虽然它似乎在这里工作,但您可能会更安全地逃避它[\w\-]

于 2014-09-14T10:08:54.637 回答