12

我正在尝试消除开源项目中的警告,并且

/[\.\,\;\:\(\)\[\]\{\}\<\>\"\'\`\~\/\|\?\!\&\@\#\s\x00-\x1f\x7f]+/

在给我

(irb):1: warning: character class has duplicated range

是否有任何工具可以自动指出正则表达式的哪些部分导致重叠?

4

2 回答 2

6

我不知道任何工具,但我发现了重叠:\s包含\t、、和\f,因此与零件重叠。\n\r\x00-\x1f

因此,除非有办法让 Ruby 本身告诉您它发现了一个“问题”,否则您可以将此正则表达式编写为(删除所有那些不必要的反斜杠):

/[.,;:()\[\]{}<>"'`~\/|?!&@# \x00-\x1f\x7f]+/
于 2013-03-26T09:17:04.923 回答
3

如果你曾经到了绝望的地步,我想你可以在 Ruby 源代码中输出一些调试信息并重新构建。:) 我相信这是引发警告的地方:

https://github.com/ruby/ruby/blob/trunk/regparse.c#L1787

于 2013-03-26T09:38:00.743 回答