Инструменты для автоматического упрощения регулярных выражений
Я пытаюсь выдавить предупреждения в проекте с открытым исходным кодом и
/[\.\,\;\:\(\)\[\]\{\}\<\>\"\'\`\~\/\|\?\!\&\@\#\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