💡 Инструкция: Выберите один ответ из пяти. Время — 70 минут. У каждого задания ровно один правильный вариант. Фрагменты рассчитаны на Ruby 4.0.6; задания Rails — на Rails 8.1.3. После завершения откроются общий процент, 5 тематических результатов и разбор всех ответов.
Вопрос 1 из 25
Какой вывод учитывает и возвращаемое значение, и побочный эффект в теме «Группы»? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
Ruby Ruby — Группы Копировать
# Проследите выполнение и выберите точный результат.
pattern = /\A\+(\d{1,3})-(\d+)\z/
match = pattern.match('+372-5551234')
p match&.captures
Шаблон захватывает код страны и локальную часть номера в две отдельные группы. Это объясняется тем, что якоря `\A` и `\z` относятся ко всей строке, а `^` и `$` в Ruby могут совпадать у границ строк внутри многострочного текста.
Из строки извлекаются `year: 2026`, `month: 07`, `day: 16` через имена, а не номера. Это объясняется тем, что круглые скобки создают захватывающую группу, `(?:...)` — незахватывающую; повторитель относится к ближайшему атому или группе.
Шаблон захватывает код страны и локальную часть номера в две отдельные группы. Это объясняется тем, что круглые скобки создают захватывающую группу, `(?:...)` — незахватывающую; повторитель относится к ближайшему атому или группе.
Шаблон находит число 42 только потому, что после него стоит `kg`, но само `kg` в результат не входит. Это объясняется тем, что круглые скобки создают захватывающую группу, `(?:...)` — незахватывающую; повторитель относится к ближайшему атому или группе.
Шаблон захватывает код страны и локальную часть номера в две отдельные группы. Это объясняется тем, что lookahead и lookbehind проверяют контекст без включения его в совпадение; поддерживаемая форма lookbehind должна иметь допустимую длину.
Вопрос 2 из 25
Проследите выполнение фрагмента. Какой результат верен для темы «Контекстные проверки lookaround»? Выберите связку, в которой верны и основной вывод, и его обоснование.
Ruby Ruby — Контекстные проверки lookaround Копировать
# Проследите выполнение и выберите точный результат.
text = 'mass=42kg, count=7'
match = text.match(/\d+(?=kg)/)
p [match[0], match.begin(0), match.end(0)]
Шаблон находит число 42 только потому, что после него стоит `kg`, но само `kg` в результат не входит. Причина такого результата: lookahead и lookbehind проверяют контекст без включения его в совпадение; поддерживаемая форма lookbehind должна иметь допустимую длину.
Шаблон находит число 42 только потому, что после него стоит `kg`, но само `kg` в результат не входит. Причина такого результата: круглые скобки создают захватывающую группу, `(?:...)` — незахватывающую; повторитель относится к ближайшему атому или группе.
Шаблон с `^...$` находит допустимую отдельную строку внутри текста, хотя весь ввод содержит дополнительную строку. Причина такого результата: lookahead и lookbehind проверяют контекст без включения его в совпадение; поддерживаемая форма lookbehind должна иметь допустимую длину.
Шаблон находит число 42 только потому, что после него стоит `kg`, но само `kg` в результат не входит. Причина такого результата: якоря `\A` и `\z` относятся ко всей строке, а `^` и `$` в Ruby могут совпадать у границ строк внутри многострочного текста.
После экранирования строка `a+b` совпадает только буквально, а не означает «одна или больше a перед b». Причина такого результата: lookahead и lookbehind проверяют контекст без включения его в совпадение; поддерживаемая форма lookbehind должна иметь допустимую длину.
Вопрос 3 из 25
Что произойдёт после последней строки в примере по теме «Именованные захваты»? Выберите связку, в которой верны и основной вывод, и его обоснование.
Ruby Ruby — Именованные захваты Копировать
# Проследите выполнение и выберите точный результат.
pattern = /\A(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})\z/
match = pattern.match('2026-07-16')
p match.named_captures
Из строки извлекаются `year: 2026`, `month: 07`, `day: 16` через имена, а не номера. Такой итог следует из правила: якоря `\A` и `\z` относятся ко всей строке, а `^` и `$` в Ruby могут совпадать у границ строк внутри многострочного текста.
Шаблон находит число 42 только потому, что после него стоит `kg`, но само `kg` в результат не входит. Такой итог следует из правила: именованные захваты доступны по имени и делают код устойчивее к добавлению других групп перед ними.
Из строки извлекаются `year: 2026`, `month: 07`, `day: 16` через имена, а не номера. Такой итог следует из правила: подстановка внешней строки внутрь Regexp требует `Regexp.escape`; иначе метасимволы меняют смысл шаблона.
Из строки извлекаются `year: 2026`, `month: 07`, `day: 16` через имена, а не номера. Такой итог следует из правила: именованные захваты доступны по имени и делают код устойчивее к добавлению других групп перед ними.
Шаблон захватывает код страны и локальную часть номера в две отдельные группы. Такой итог следует из правила: именованные захваты доступны по имени и делают код устойчивее к добавлению других групп перед ними.
Вопрос 4 из 25
Что покажет выполнение этого фрагмента из раздела «Безопасность шаблона»? Выберите связку, в которой верны и основной вывод, и его обоснование.
Ruby Ruby — Безопасность шаблона Копировать
# Проследите выполнение и выберите точный результат.
needle = 'a+b'
pattern = /\A#{Regexp.escape(needle)}\z/
p [pattern.match?('a+b'), pattern.match?('aaab')]
Шаблон с `^...$` находит допустимую отдельную строку внутри текста, хотя весь ввод содержит дополнительную строку. Механизм результата таков: подстановка внешней строки внутрь Regexp требует `Regexp.escape`; иначе метасимволы меняют смысл шаблона.
После экранирования строка `a+b` совпадает только буквально, а не означает «одна или больше a перед b». Механизм результата таков: якоря `\A` и `\z` относятся ко всей строке, а `^` и `$` в Ruby могут совпадать у границ строк внутри многострочного текста.
После экранирования строка `a+b` совпадает только буквально, а не означает «одна или больше a перед b». Механизм результата таков: именованные захваты доступны по имени и делают код устойчивее к добавлению других групп перед ними.
После экранирования строка `a+b` совпадает только буквально, а не означает «одна или больше a перед b». Механизм результата таков: подстановка внешней строки внутрь Regexp требует `Regexp.escape`; иначе метасимволы меняют смысл шаблона.
Шаблон находит число 42 только потому, что после него стоит `kg`, но само `kg` в результат не входит. Механизм результата таков: подстановка внешней строки внутрь Regexp требует `Regexp.escape`; иначе метасимволы меняют смысл шаблона.
Вопрос 5 из 25
Какой вывод учитывает и возвращаемое значение, и побочный эффект в теме «Проверка допущений»? Нужен вариант без логического разрыва между первой и второй частью.
Ruby Ruby — Проверка допущений Копировать
# Проследите выполнение и выберите точный результат.
text = "SAFE
DROP"
p(/^SAFE$/.match?(text))
p(/\ASAFE\z/.match?(text))
Шаблон с `^...$` находит допустимую отдельную строку внутри текста, хотя весь ввод содержит дополнительную строку. Наблюдение согласуется с тем, что круглые скобки создают захватывающую группу, `(?:...)` — незахватывающую; повторитель относится к ближайшему атому или группе.
Шаблон с `^...$` находит допустимую отдельную строку внутри текста, хотя весь ввод содержит дополнительную строку. Наблюдение согласуется с тем, что якоря `\A` и `\z` относятся ко всей строке, а `^` и `$` в Ruby могут совпадать у границ строк внутри многострочного текста.
Шаблон с `^...$` находит допустимую отдельную строку внутри текста, хотя весь ввод содержит дополнительную строку. Наблюдение согласуется с тем, что lookahead и lookbehind проверяют контекст без включения его в совпадение; поддерживаемая форма lookbehind должна иметь допустимую длину.
После экранирования строка `a+b` совпадает только буквально, а не означает «одна или больше a перед b». Наблюдение согласуется с тем, что якоря `\A` и `\z` относятся ко всей строке, а `^` и `$` в Ruby могут совпадать у границ строк внутри многострочного текста.
Шаблон находит число 42 только потому, что после него стоит `kg`, но само `kg` в результат не входит. Наблюдение согласуется с тем, что якоря `\A` и `\z` относятся ко всей строке, а `^` и `$` в Ruby могут совпадать у границ строк внутри многострочного текста.
Вопрос 7 из 25
Какой дефект может проявиться на границе показанного сценария «Контекстные проверки lookaround»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
Ruby Ruby — Контекстные проверки lookaround Копировать
# Обычный запуск проходит. Найдите скрытый риск.
text = 'mass=42kg, count=7'
match = text.match(/\d+(?=kg)/)
p [match[0], match.begin(0), match.end(0)]
Проверка только формы регулярным выражением не подтверждает календарную допустимость даты вроде 2026-02-31. Этот риск связан с тем, что lookahead и lookbehind проверяют контекст без включения его в совпадение; поддерживаемая форма lookbehind должна иметь допустимую длину.
Лишние захваты меняют номера групп после правки шаблона и ломают код, который обращается к `$1` и `$2`. Этот риск связан с тем, что lookahead и lookbehind проверяют контекст без включения его в совпадение; поддерживаемая форма lookbehind должна иметь допустимую длину.
Сложные вложенные проверки контекста делают выражение непредсказуемым по времени и трудным для сопровождения. Этот риск связан с тем, что якоря `\A` и `\z` относятся ко всей строке, а `^` и `$` в Ruby могут совпадать у границ строк внутри многострочного текста.
Сложные вложенные проверки контекста делают выражение непредсказуемым по времени и трудным для сопровождения. Этот риск связан с тем, что lookahead и lookbehind проверяют контекст без включения его в совпадение; поддерживаемая форма lookbehind должна иметь допустимую длину.
Сложные вложенные проверки контекста делают выражение непредсказуемым по времени и трудным для сопровождения. Этот риск связан с тем, что круглые скобки создают захватывающую группу, `(?:...)` — незахватывающую; повторитель относится к ближайшему атому или группе.
Вопрос 12 из 25
Какое общее правило связывает результат и риск в разделе «Контекстные проверки lookaround»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
Круглые скобки создают захватывающую группу, `(?:...)` — незахватывающую; повторитель относится к ближайшему атому или группе. Из этого следует, что шаблон находит число 42 только потому, что после него стоит `kg`, но само `kg` в результат не входит.
Lookahead и lookbehind проверяют контекст без включения его в совпадение; поддерживаемая форма lookbehind должна иметь допустимую длину. Из этого следует, что шаблон с `^...$` находит допустимую отдельную строку внутри текста, хотя весь ввод содержит дополнительную строку.
Lookahead и lookbehind проверяют контекст без включения его в совпадение; поддерживаемая форма lookbehind должна иметь допустимую длину. Из этого следует, что шаблон находит число 42 только потому, что после него стоит `kg`, но само `kg` в результат не входит.
Якоря `\A` и `\z` относятся ко всей строке, а `^` и `$` в Ruby могут совпадать у границ строк внутри многострочного текста. Из этого следует, что шаблон находит число 42 только потому, что после него стоит `kg`, но само `kg` в результат не входит.
Lookahead и lookbehind проверяют контекст без включения его в совпадение; поддерживаемая форма lookbehind должна иметь допустимую длину. Из этого следует, что после экранирования строка `a+b` совпадает только буквально, а не означает «одна или больше a перед b».
Вопрос 13 из 25
Какой механизм отделяет верный разбор от похожего, но ошибочного объяснения «Именованные захваты»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
Именованные захваты доступны по имени и делают код устойчивее к добавлению других групп перед ними. Наблюдаемое следствие: из строки извлекаются `year: 2026`, `month: 07`, `day: 16` через имена, а не номера.
Именованные захваты доступны по имени и делают код устойчивее к добавлению других групп перед ними. Наблюдаемое следствие: шаблон находит число 42 только потому, что после него стоит `kg`, но само `kg` в результат не входит.
Именованные захваты доступны по имени и делают код устойчивее к добавлению других групп перед ними. Наблюдаемое следствие: шаблон захватывает код страны и локальную часть номера в две отдельные группы.
Подстановка внешней строки внутрь Regexp требует `Regexp.escape`; иначе метасимволы меняют смысл шаблона. Наблюдаемое следствие: из строки извлекаются `year: 2026`, `month: 07`, `day: 16` через имена, а не номера.
Якоря `\A` и `\z` относятся ко всей строке, а `^` и `$` в Ruby могут совпадать у границ строк внутри многострочного текста. Наблюдаемое следствие: из строки извлекаются `year: 2026`, `month: 07`, `day: 16` через имена, а не номера.
Вопрос 15 из 25
Какое правило остаётся верным, даже если вход и порядок вызовов изменятся, в теме «Проверка допущений»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
Круглые скобки создают захватывающую группу, `(?:...)` — незахватывающую; повторитель относится к ближайшему атому или группе. Это правило даёт такой результат: шаблон с `^...$` находит допустимую отдельную строку внутри текста, хотя весь ввод содержит дополнительную строку.
Якоря `\A` и `\z` относятся ко всей строке, а `^` и `$` в Ruby могут совпадать у границ строк внутри многострочного текста. Это правило даёт такой результат: шаблон с `^...$` находит допустимую отдельную строку внутри текста, хотя весь ввод содержит дополнительную строку.
Lookahead и lookbehind проверяют контекст без включения его в совпадение; поддерживаемая форма lookbehind должна иметь допустимую длину. Это правило даёт такой результат: шаблон с `^...$` находит допустимую отдельную строку внутри текста, хотя весь ввод содержит дополнительную строку.
Якоря `\A` и `\z` относятся ко всей строке, а `^` и `$` в Ruby могут совпадать у границ строк внутри многострочного текста. Это правило даёт такой результат: после экранирования строка `a+b` совпадает только буквально, а не означает «одна или больше a перед b».
Якоря `\A` и `\z` относятся ко всей строке, а `^` и `$` в Ruby могут совпадать у границ строк внутри многострочного текста. Это правило даёт такой результат: шаблон находит число 42 только потому, что после него стоит `kg`, но само `kg` в результат не входит.
Вопрос 19 из 25
Какое изменение устраняет причину проблемы в теме «Безопасность шаблона», а не маскирует симптом? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
Ruby Ruby — Безопасность шаблона Копировать
# Выберите изменение, которое исправляет причину.
needle = 'a+b'
pattern = /\A#{Regexp.escape(needle)}\z/
p [pattern.match?('a+b'), pattern.match?('aaab')]
После структурного разбора передавать поля календарной или доменной библиотеке для семантической проверки. Решение адресует следующий дефект: даже экранированный пользовательский фрагмент не спасает от катастрофического возврата, если окружающий шаблон сам содержит опасные вложенные квантификаторы.
Экранировать данные, ограничивать длину входа и избегать неоднозначных вложенных повторов; критичные шаблоны измерять на худших строках. Решение адресует следующий дефект: проверка только формы регулярным выражением не подтверждает календарную допустимость даты вроде 2026-02-31.
Экранировать данные, ограничивать длину входа и избегать неоднозначных вложенных повторов; критичные шаблоны измерять на худших строках. Решение адресует следующий дефект: сложные вложенные проверки контекста делают выражение непредсказуемым по времени и трудным для сопровождения.
Экранировать данные, ограничивать длину входа и избегать неоднозначных вложенных повторов; критичные шаблоны измерять на худших строках. Решение адресует следующий дефект: даже экранированный пользовательский фрагмент не спасает от катастрофического возврата, если окружающий шаблон сам содержит опасные вложенные квантификаторы.
Для проверки полного значения использовать `\A` и `\z`, а многострочный поиск выделять в отдельную операцию. Решение адресует следующий дефект: даже экранированный пользовательский фрагмент не спасает от катастрофического возврата, если окружающий шаблон сам содержит опасные вложенные квантификаторы.