Поиск и замена
gsub, sub, match
«Поиск и замена» — бесплатный урок Ruby Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Ruby Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Ruby Academy содержит 4 уроков всего.
Поиск подстроки
Метод index возвращает позицию первого совпадения или nil, если совпадение не найдено. include? возвращает значение true или false.
text = "hello world"
puts text.index("world")
puts text.include?("world")Замена первого совпадения с помощью sub
sub заменяет только первое вхождение шаблона новым значением.
text = "cat cat cat"
puts text.sub("cat", "dog")Замена всех совпадений с помощью gsub
gsub означает глобальную замену. Он заменяет каждое вхождение.
text = "cat cat cat"
puts text.gsub("cat", "dog")Использование регулярных выражений
Шаблоны между косыми чертами, например /.../, являются регулярными выражениями. /\d/ находит цифру. gsub и sub принимают шаблоны регулярных выражений.
text = "a1b2c3"
puts text.gsub(/\d/, "*")Проверка совпадения с помощью match?
match? возвращает true, если регулярное выражение совпадает с фрагментом где-либо в строке. Этот метод удобен и быстр для проверок.
email = "ada@ruby.org"
puts email.match?(/@/)
puts "no at sign".match?(/@/)Получение данных с помощью match
match возвращает объект MatchData. Индекс [0] содержит совпадение целиком; круглые скобки создают группы захвата, к которым обращаются через [1], [2] и так далее.
data = "2024-05-30"
m = data.match(/(\d+)-(\d+)-(\d+)/)
puts m[1]
puts m[2]Поиск всех совпадений с помощью scan
scan возвращает массив всех совпадений в строке. Это особенно удобно для извлечения всех чисел или слов.
text = "phone 555 and 777"
puts text.scan(/\d+/).inspectЯкоря
Якоря привязывают совпадение к определённой позиции. ^ означает начало строки, а $ — конец. \A и \z привязывают совпадение к границам всей строки.
puts "hello".match?(/^hel/)
puts "hello".match?(/llo$/)
puts "hello".match?(/^world/)Классы символов
Квадратные скобки задают набор допустимых символов. [aeiou] находит любую гласную. [a-z] находит любую строчную букву.
text = "Ruby"
puts text.gsub(/[aeiou]/i, "_")Блоки в gsub
Передайте блоку gsub, чтобы динамически преобразовывать каждое совпадение. Текст совпадения передаётся в блок как аргумент.
text = "one two"
result = text.gsub(/\w+/) { |w| w.upcase }
puts resultПоиск без учёта регистра
Флаг i после регулярного выражения заставляет его игнорировать регистр букв.
text = "Hello HELLO hello"
puts text.gsub(/hello/i, "hi")Быстрая проверка
Проверьте свои навыки поиска и замены.
Итоги
Теперь Вы умеете искать и заменять текст:
index,include?,match?для поискаsub(первого совпадения) иgsub(всех совпадений) для замены- шаблоны регулярных выражений, якоря и классы символов
scanдля извлечения всех совпадений и блоки для динамической замены
Далее: разделение и объединение строк.
puts "a,b,c".gsub(",", " | ")Часто задаваемые вопросы
Урок «Поиск и замена» бесплатный?
Да — полный текст урока «Поиск и замена» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Ruby Academy, подпишись на CoddyKit PRO. Курс Ruby Academy содержит 4 уроков всего.
Чему я научусь в уроке «Поиск и замена»?
gsub, sub, match Ты практикуешь Ruby Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Ruby Academy?
Предыдущий опыт не требуется. Ruby Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Поиск и замена»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Ruby Academy?
Да. Каждый урок Ruby Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.