Литералы Regex и сопоставление
Сопоставляйте шаблоны с типом Regex.
«Литералы Regex и сопоставление» — бесплатный урок Swift Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.
Регулярные выражения в Swift
В Swift 5.7+ в стандартной библиотеке и Foundation доступны встроенные регулярные выражения. Регулярное выражение можно записать как литерал между косыми чертами, например /\d+/, а компилятор проверит его во время сборки.
Литерал регулярного выражения
Литерал регулярного выражения создаёт значение Regex. Его тип отражает то, что возвращает совпадение. Самый простой шаблон сопоставляет фиксированную последовательность символов.
let pattern = /hello/
if "hello world".contains(pattern) {
print("Found hello")
}wholeMatch(of:)
wholeMatch(of:) успешно выполняется, только если шаблону соответствует вся строка. Метод возвращает необязательное совпадение или nil, если вся строка шаблону не соответствует.
let digits = /\d+/
if let m = "12345".wholeMatch(of: digits) {
print("Whole match: \(m.output)")
} else {
print("No whole match")
}firstMatch(of:)
firstMatch(of:) просматривает строку и возвращает первое место, где шаблон совпадает с её частью.
let word = /\w+/
if let m = " swift rocks".firstMatch(of: word) {
print("First word: \(m.output)")
}Доступ к диапазону совпадения
Совпадение предоставляет range в исходной строке, поэтому вы точно знаете, где оно произошло.
let text = "abc123def"
if let m = text.firstMatch(of: /\d+/) {
print("Matched: \(m.output)")
print("At: \(text[m.range])")
}Классы символов
Внутри шаблона \d соответствует цифре, \w — символу слова, а \s — пробельному символу. Квадратные скобки задают пользовательский набор, например [aeiou].
let vowel = /[aeiou]/
if let m = "sky".firstMatch(of: vowel) {
print("Vowel: \(m.output)")
} else {
print("No vowels found")
}Квантификаторы
Квантификаторы управляют повторением: * означает ноль или более повторений, + — одно или более, ? — необязательность, а {n,m} задаёт ограниченное количество повторений.
let phone = /\d{3}-\d{4}/
print("555-1234".wholeMatch(of: phone) != nil)
print("12-34".wholeMatch(of: phone) != nil)Якоря
Используйте ^, чтобы привязать шаблон к началу строки, а $ — к концу строки. Якоря не потребляют символы, а проверяют позицию.
let startsWithCap = /^[A-Z]\w*/
if let m = "Swift".firstMatch(of: startsWithCap) {
print("Matched: \(m.output)")
}Сопоставление без учёта регистра
Игнорировать регистр можно, добавив .ignoresCase() к значению регулярного выражения. Это полезно, когда регистр входных данных непредсказуем.
let pattern = /swift/.ignoresCase()
print("I love SWIFT".contains(pattern))Сопоставление с помощью matches(of:)
matches(of:) возвращает коллекцию всех неперекрывающихся совпадений в строке, позволяя перебрать их все.
let nums = "a1 b22 c333"
for m in nums.matches(of: /\d+/) {
print(m.output)
}Проверка входных данных
Один из распространённых вариантов использования — проверка данных: создайте шаблон для полного ожидаемого формата и проверьте его с помощью wholeMatch, который возвращает nil при несовпадении.
func isZip(_ s: String) -> Bool {
s.wholeMatch(of: /\d{5}/) != nil
}
print(isZip("90210"))
print(isZip("ABCDE"))Быстрая проверка
Какой метод выполняется успешно только тогда, когда шаблону соответствует вся строка?
Итоги
Вы научились записывать литералы регулярных выражений между косыми чертами и выполнять сопоставление с помощью wholeMatch(of:), firstMatch(of:) и matches(of:). Вы также изучили классы символов, квантификаторы, якоря и сопоставление без учёта регистра. Далее вы извлечёте данные из совпадений с помощью групп захвата.
Часто задаваемые вопросы
Урок «Литералы Regex и сопоставление» бесплатный?
Да — полный текст урока «Литералы Regex и сопоставление» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.
Чему я научусь в уроке «Литералы Regex и сопоставление»?
Сопоставляйте шаблоны с типом Regex. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Литералы Regex и сопоставление»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Литералы Regex и сопоставление
- Захватывающие группы
- RegexBuilder DSL
- Замена и разделение текста