2013-03-26 60 views
12

我想壁球警告在一个开源项目,并工具自动简化正则表达式

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

是给我

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

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

回答

6

我不知道任何工具,但我发现重叠:\s包含\t\f\n\r,使之与\x00-\x1f部分重叠。

所以,除非有办法让红宝石本身要告诉你,它发现了一个“问题”,你可以写这个表达式为(除去沿途所有这些不必要的反斜线):

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

扩展范围'\ x00- \ x20'是另一种选择,包括'space'。 – Stefan 2013-03-26 09:20:38

3

如果你曾经达到过这种绝望的境地,我想你可以在Ruby源代码中输出一些调试信息并重新编译。 :)我相信这是在警告被抛出的地方:

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

+0

相关门票:http://bugs.ruby-lang.org/issues/show/1831 – Stefan 2013-03-26 09:46:20