2013-03-26 1 views
12

che sto cercando di avvertimenti da squash in un progetto open source, estrumenti per semplificare automaticamente regex

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

mi sta dando

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

Ci sono strumenti che indicano automaticamente quali parti di la regexp provoca la sovrapposizione?

risposta

6

non so di qualsiasi strumento, ma ho notato la sovrapposizione: \s contiene \t, \f, \n e \r, in modo che si sovrappone con la parte \x00-\x1f.

Quindi, a meno che non ci sia un modo per ottenere Rubino sé per dirvi che ha trovato un "problema", è possibile scrivere questo regex come (rimozione di tutti quei backslash non necessari lungo la strada):

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

Estendere la gamma di '\ x00- \ x20' è un'altra opzione per includere' space'. – Stefan

3

Se hai mai raggiunto quel punto di disperazione, immagino che potresti mettere in output alcune informazioni di debug in Ruby source e ricostruire. :) Credo che questo sia il luogo in cui viene generata l'avvertimento:

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

+0

Il ticket correlato: http://bugs.ruby-lang.org/issues/show/1831 – Stefan