2

在 Ruby 1.9.3 上运行以下命令时,我收到了意外警告:

"one two,three;four\rfive\nsix\r\nseven,;\r\n,;\r\neight".split(/[,|;|\r\n]+/m)

我收到的警告是:

warning: character class has duplicated range: /[,|;|\r\n]+/

我得到了我期望的结果——一个如下所示的数组:

[
  [0] "one two",
  [1] "three",
  [2] "four",
  [3] "five",
  [4] "six",
  [5] "seven",
  [6] "eight"
]

我想了解的是导致重复范围警告的原因是什么?通过删除三个匹配器选项之一,我无法获得相同的结果,因此我无法理解警告。

谢谢你的帮助!

4

1 回答 1

4

看起来你把事情搞混了。它目前与以下任何一项匹配:

  • ,
  • |
  • ;
  • \r
  • \n

并且您在字符类中有两次竖线 (|)。

要使警告消失,请改用:/[,|;\r\n]+/. 注意:只有一根管子。

但我认为您真正想要的是:/(,|;|\r|\n)+//[,;\r\n]+/
这与以下内容匹配:

  • ,
  • ;
  • \r
  • \n
于 2012-09-10T17:15:18.340 回答