Проектная лаборатория
Собственный Grep
Этап 15 · Обратные ссылки
Обратные ссылки на вложенные группы
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы добавите поддержку обратных ссылок на вложенные группы.
Вложенные захватывающие группы
При вложении захватывающих групп каждая всё равно получает собственный номер обратной ссылки. Нумерация определяется положением открывающей скобки ((), слева направо.
Разберём шаблон ('(cat) and \2') is the same as \1:
- Первая группа (первая
():'(cat) and \2'. - Вторая группа (вторая
():(cat). \2ссылается на вторую группу и соответствует"cat".\1ссылается на первую группу и соответствует всей строке"'cat and cat'".
Пример входной строки, соответствующей этому шаблону: "'cat and cat' is the same as 'cat and cat'".
Ещё примеры:
((dog)-\2)находит совпадение в"dog-dog"(вторая группа —"dog", первая —"dog-dog").((\w+) \2) and \1находит совпадение в"cat cat and cat cat".
Проверки
Тестирующая система запустит программу так:
$ echo -n "'cat and cat' is the same as 'cat and cat'" | ./your_program.sh -E "('(cat) and \2') is the same as \1"Программа должна:
- Завершиться с кодом
0, если входная строка соответствует шаблону с обратными ссылками на вложенные группы. - Завершиться с кодом
1в противном случае.
Проверка в вашей IDE
Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.
Настройка проекта и IDE
1. Создайте проект один раз
node '/opt/graphlms/tools/project-lab/cli.mjs' init grep ./my-grep --language go2. Откройте папку в IDE
cd ./my-grepРеализуйте требования этапа в созданном проекте.
Запустите из папки проекта
node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage xe5Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.