2013-03-26 20 views
12

Tôi đang cố gắng để cảnh báo bí trong một dự án mã nguồn mở, vàcụ để tự động đơn giản hóa regexes

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

được đem lại cho tôi

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

Có bất kỳ công cụ tự động chỉ ra phần nào của regexp gây ra sự chồng chéo?

Trả lời

6

Tôi không biết về bất kỳ công cụ, nhưng tôi đã phát hiện ra sự chồng chéo: \s chứa \t, \f, \n\r, do đó trùng lặp với phần \x00-\x1f.

Vì vậy, trừ khi có một cách để có được của Ruby tự nói với bạn rằng nó tìm thấy một "vấn đề", bạn có thể viết regex này dưới dạng (loại bỏ tất cả những dấu xồ nguợc không cần thiết trên đường đi):

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

Mở rộng phạm vi cho '\ x00- \ x20' là một tùy chọn để bao gồm 'space'. – Stefan

3

Nếu bạn đã từng đạt đến điểm tuyệt vọng đó, tôi đoán bạn có thể đưa ra một số thông tin gỡ lỗi trong nguồn Ruby và xây dựng lại. :) Tôi tin rằng đây là nơi mà các cảnh báo được ném:

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

+0

Vé liên quan: http://bugs.ruby-lang.org/issues/show/1831 – Stefan