Инструменты для автоматического упрощения регулярных выражений

Я пытаюсь выдавить предупреждения в проекте с открытым исходным кодом и

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

дает мне

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

Существуют ли какие-либо инструменты, которые автоматически указывают, какие части регулярного выражения вызывают перекрытие?

Ответ 1

Я не знаю ни одного инструмента, но я заметил совпадение: \s содержит \t, \f, \n и \r, так что перекрывается с частью \x00-\x1f.

Итак, если у нас нет способа заставить Ruby сказать вам, что он нашел "проблему", вы можете написать это регулярное выражение как (удаляя все ненужные обратные косые черты вдоль пути):

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

Ответ 2

Если вы когда-либо доберетесь до этой точки отчаяния, я думаю, вы могли бы вывести некоторую отладочную информацию в источник Ruby и перестроить.:) Я считаю, что это место, где бросается предупреждение:

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