2013-03-26 4 views
12

Ich bin in einer Open-Source-Projekt Squash Warnungen versuchen, undWerkzeuge zur automatischen Vereinfachung Regexes

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

ist mir

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

geben Gibt es irgendwelche Werkzeuge, die darauf hinweisen, automatisch, welche Teile die Regexp verursacht die Überlappung?

Antwort

6

Ich weiß nicht, von Werkzeug, aber ich habe die Überlappung gesichtet: \s enthält \t, \f, \n und \r, so dass mit dem \x00-\x1f Teil überlappt.

Also, wenn es eine Möglichkeit zu bekommen Rubin selbst zu sagen, dass es ein „Problem“ gefunden haben, können Sie diese Regex schreiben als (all diese unnötigen Schrägstriche auf dem Weg zu entfernen):

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

den Bereich erweitern zu '\ x00- \ x20' ist eine weitere Option' space' aufzunehmen. – Stefan

3

Wenn Sie erreichen diesen Punkt der Verzweiflung, ich denke, Sie könnten einige Debug-Informationen in Ruby-Quelle ausgeben und neu aufbauen. :) Ich glaube, dass dies der Ort ist, wo die Warnung ausgelöst wird:

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

+0

Das zugehörige Ticket: http://bugs.ruby-lang.org/issues/show/1831 – Stefan