Expressões regulares em Swift: exemplos práticos para iOS/macOS

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Expressões regulares em Swift com exemplos: na prática



Expressões regulares (regex) são uma ferramenta poderosa para trabalhar com dados textuais. Em Swift, para trabalhar com expressões regulares, utiliza-se a classe NSRegularExpression do framework Foundation. Neste artigo, vamos explorar exemplos práticos de uso de expressões regulares em Swift para aplicações iOS e macOS: desde busca simples até validação complexa e substituição de texto.



Fundamentos do trabalho com NSRegularExpression em Swift



A classe NSRegularExpression fornece todos os métodos necessários para trabalhar com expressões regulares. O algoritmo básico de trabalho inclui três etapas:



  1. Criação do objeto padrão da expressão regular
  2. Aplicação do padrão à string
  3. Processamento dos resultados (correspondências, substituições)


Criação de uma expressão regular



Aqui está como criar e aplicar uma expressão regular simples para buscar a palavra "Swift":



import Foundation

let text = "Estudando Swift e desenvolvimento iOS"let pattern = "Swift"

do { let regex = try NSRegularExpression(pattern: pattern) let results = regex.matches(in: text, range: NSRange(text.startIndex..., in: text)) for match in results { if let range = Range(match.range, in: text) { print("Encontrado: \\(text[range])") } }} catch { print("Erro na expressão regular: \\(error.localizedDescription)")}


Observe a conversão de Range — esta é a forma padrão de trabalhar com posições em strings Swift. Resultado da execução: "Encontrado: Swift".



Exemplo prático 1: Busca de endereços de email



Uma das tarefas mais comuns é extrair endereços de email de um texto. Vejamos um exemplo que encontra todos os emails em uma string:



import Foundation

func findEmails(in text: String) -> [String] { let pattern = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Za-z]{2,}" var emails: [String] = [] do { let regex = try NSRegularExpression(pattern: pattern) let results = regex.matches(in: text, range: NSRange(text.startIndex..., in: text)) for match in results { if let range = Range(match.range, in: text) { emails.append(String(text[range])) } } } catch { print("Erro: \\(error)") } return emails}

// Exemplo de usolet sampleText = "Contatos: support@example.com e admin@site.org"let foundEmails = findEmails(in: sampleText)print(foundEmails) // ["support@example.com", "admin@site.org"]


Este padrão considera os caracteres padrão permitidos em emails e verifica a presença de um ponto na parte do domínio. Para produção, pode-se adicionar suporte a domínios cirílicos.



Exemplo prático 2: Validação de número de telefone



A validação de dados inseridos é uma parte importante de qualquer aplicação. Veja como validar um número de telefone russo no formato +7 (XXX) XXX-XX-XX:



import Foundation

func isValidPhoneNumber(_ phone: String) -> Bool { // Padrão para número russo: +7 (XXX) XXX-XX-XX let pattern = "^\\\\+7\\\\s?\\\\(?[0-9]{3}\\\\)?\\\\s?[0-9]{3}-?[0-9]{2}-?[0-9]{2}$" do { let regex = try NSRegularExpression(pattern: pattern) let range = NSRange(location: 0, length: phone.utf16.count) return regex.firstMatch(in: phone, range: range) != nil } catch { return false }}

// Testelet validNumbers = ["+7 (495) 123-45-67", "+74951234567", "+7 495 1234567"]let invalidNumbers = ["8 (495) 123-45-67", "+7 (495) 123-45-678", "abc"]

for number in validNumbers { print("\\(number): \\(isValidPhoneNumber(number))") // true}

for number in invalidNumbers { print("\\(number): \\(isValidPhoneNumber(number))") // false}


O padrão usa âncora

Blogs

Book Recommendations