Пустые группировки в регулярном выражении

Issue #370 new
Григорий Терехов created an issue

Реализовать правило: "Пустые группировки в регулярном выражении не несут смысла"

Comments (26)

  1. Григорий Терехов reporter

    Осталось реализовать случай вложенных пустых группировок: (?:(?:(?:)))

  2. Oleg Sychev repo owner

    Тестировать это сейчас только через юнит-тесты можно? Чем скорее и удобнее будет тестирование, тем лучше...

  3. Oleg Sychev repo owner

    Еще

    а) отучитесь вы уже писать комменты на русском, тем более там не такие уж сложные фразы

    б) не надо комиттить отладочную печать - даже в тестах - и подобные вещи, в репозитории код должен быть чистым (и комментирование части тестов тоже не стоит комититть). Через shelve вполне возможно закомиттить часть изменений в файл если это необходимо.

  4. Григорий Терехов reporter

    Интерфейс в простейшем виде реализован, им тоже можно пользоваться. Что касается группировок, то тут осталась одна проблема. В случае, когда пустая группировка является едиственным дочерним элементом оператора, этот оператор тоже надо удалять. Например для "a(?:){3}" должно быть так "a", а не "a{3}". Как только это поправлю, сразу напишу сюда

  5. Oleg Sychev repo owner

    У вас ftp-доступ к edu.vstu.org есть? Если есть интерфейс для тестирования - выкладывайте туда. А шикарно было бы доделать к интерфейсу кнопку, которая показывала бы код юнит-теста или запоминала комбинацию для юнит теста -подумать как проще всего накапливать новые примеры и ошибочные строки...

  6. Oleg Sychev repo owner

    Сервер похоже повис после того, как я попробовал примеры типа (?:)\1 и (?:) - не могу уточнить в какой момент, с аяксом это не ясно. Попробуйте помоптимизировать эти регексы разными способами - похоже что где-то повисание получается.

  7. Oleg Sychev repo owner

    По идее удалять нужно не только пустые группировки, но и группировки без альтернативы или конкатенации внутри. Кроме ситуаций типа (?:a{2})? чтобы отличить добавочный квантификатор от ленивости. Но по вложенным квантификаторам у нас должно было быть правило, оно готово?

  8. Oleg Sychev repo owner

    То есть варианты типа (?:a){2} или (?:[ab]){2} тоже должны удалять группировки

  9. Григорий Терехов reporter

    Да, я понял. Это реализовано как часть нормализации для CSE, правило же называется "Пустые группировки в регулярном выражении" и я подумал, что раз пользователь нарисовал эту группировку не пустую, то пусть будет. Но я согласен, что стоит предлагать убирать не нужные не пустые группировки, так что сделаю это

  10. Григорий Терехов reporter

    Вобщем это тоже готово, осталось только текст подсказок поправить

  11. Oleg Sychev repo owner

    Да текст должен быть другим. Думаю стоит назвать "Не нужные" или "Бесполезные" группировки, а не просто пустые...

    Кстати и подмаски такие тоже надо обнаруживать и устранять если нет обратных ссылок/условных подмасок на них, а не только пустые. А то сейчас с подмасками в два правила работает - сначала она делает из нее группировку, и только потом замечает что группировка то там вовсе не нужна.

  12. Григорий Терехов reporter

    Случай с "(?:)" поправлен, CSE был виноват. Но остался баг с подсветкой в регулярке, если сервер вернул пустую регулярку, это пофикшу

  13. Oleg Sychev repo owner

    (?:) подтверждаю, только надо разделить сообщение - когда пустые скобки, а когда они не влияют на выражение но все-таки не пустые... А то юзер очень сильно удивится...

  14. Григорий Терехов reporter

    Но есть баг. Вот такая штука "a(?:a|b)" проверяться не должна. Доделаю

  15. Oleg Sychev repo owner

    1) (?:) когда составляет все выражение (результат получится пустым) - не удаляется при нажатии кнопки применить, хотя правило выдается.

    Остальное работает

  16. Oleg Sychev repo owner

    Сервер больше не виснет, но когда выражение без конкатенаций и альтернатив то ничего и не происходит - как в случае (?:) так и (?:)+ например.

  17. Log in to comment