Ruby “意外正则表达式警告”;警告:字符类具有重复的范围;
在Ruby 1.9.3上运行以下程序时,我收到一个意外警告:Ruby “意外正则表达式警告”;警告:字符类具有重复的范围;,ruby,regex,Ruby,Regex,在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
"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"
]
我想了解的是,是什么导致了重复范围警告?我无法通过删除三个匹配器选项中的一个来获得相同的结果,因此我无法理解警告
谢谢你的帮助 看起来你把事情搞混了。 它当前与以下任一项匹配:
- ,
- |
- )李>
- \r
- \n
/[,|;\r\n]+/
。注意:只有一个管道
但我想你真正想要的是:/(,| | | |\r |\n)+/
或/[,;\r\n]+/
这与以下内容相匹配:
[
[0] "one two",
[1] "three",
[2] "four",
[3] "five",
[4] "six",
[5] "seven",
[6] "eight"
]
- ,
- )李>
- \r
- \n
- ,
- |
- )李>
- \r
- \n
/[,|;\r\n]+/
。注意:只有一个管道
但我想你真正想要的是:/(,| | | |\r |\n)+/
或/[,;\r\n]+/
这与以下内容相匹配:
[
[0] "one two",
[1] "three",
[2] "four",
[3] "five",
[4] "six",
[5] "seven",
[6] "eight"
]
- ,
- )李>
- \r
- \n
/[,| | | \n | \r\n]+/m
,因此我错误地假设管道的行为类似于和或。在字符类中,它们不充当或+1,但实际上我认为最初的意图是匹配,
或代码>或\r\n
。您的正则表达式也将匹配\r\r\r
,但我认为这在实践中并不重要…@TimPietzcker:我一开始也这么认为,但看看这个问题。在四个和五个之间只有\r
,OP希望他们分开。啊,对了!我重构的原始表达式看起来是这样的/[,| | | \n | \r\n]+/m
,因此我错误地假设管道的行为类似于和或。在字符类中,它们不充当或+1,但实际上我认为最初的意图是匹配,
或代码>或\r\n
。您的正则表达式也将匹配\r\r\r
,但我认为这在实践中并不重要…@TimPietzcker:我一开始也这么认为,但看看这个问题。在四个和五个之间只有\r
,OP希望它们分开。顺便说一下,你不需要m
修饰符,因为你的正则表达式中没有
的行为会受到影响。@TimPietzcker!谢谢我从这一个问题中学到了不少。顺便说一下,你不需要m
修饰符,因为你的正则表达式中没有
的行为会受到它的影响。@TimPietzcker真的!谢谢我从这个问题中学到了不少东西。