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"
]

私が理解したいのは、重複範囲の警告の原因は何ですか?3つのマッチャーオプションの1つを削除しても同じ結果が得られないため、警告を理解できません。

助けてくれてありがとう!

4

1 に答える 1

4

少し混乱したようです。現在、これらのいずれかに一致します。

  • |
  • ;
  • \ r
  • \ n

そして、あなたはキャラクタークラスに2回パイプ(|)を持っています。

警告を消すには、代わりにこれを使用してください:/[,|;\r\n]+/。注:パイプは1つだけです。

しかし、あなたが本当に望んでいたのはこれだと思います:/(,|;|\r|\n)+/または/[,;\r\n]+/
これは次のように一致します:

  • ;
  • \ r
  • \ n
于 2012-09-10T17:15:18.340 に答える