2013-03-26 10 views
12

Próbuję ostrzeżeń squasha w projekcie open source iNarzędzia do automatycznego upraszczających regexes

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

daje mi

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

Czy istnieją jakieś narzędzia, które automatycznie podkreślić które części wyrażenie regularne powoduje nakładanie się?

Odpowiedz

6

ja nie znam żadnego narzędzia, ale ja zauważony nakładania: \s zawiera \t, \f, \n i \r tak, że pokrywa się z \x00-\x1f części.

Więc, chyba że istnieje sposób, aby uzyskać Sam Ruby powiedzieć, że okazało się, że „problem”, można napisać regex jako (usuwanie tych wszystkich niepotrzebnych backslashy po drodze):

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

Rozszerzenie zakresu na '\ x00- \ x20' to kolejna opcja to' space'. – Stefan

3

Jeśli kiedykolwiek osiągnąłeś ten punkt desperacji, domyślam się, że możesz umieścić informacje o debugowaniu w źródle Ruby i odbudować je. :) Uważam, że to jest miejsce, gdzie jest wyrzucane ostrzeżenie:

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

+0

Powiązany bilet: http://bugs.ruby-lang.org/issues/show/1831 – Stefan

Powiązane problemy