Expressões regulares em Swift: guia completo com exemplos

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: do básico aos exemplos avançados



Expressões regulares (regex) são uma ferramenta poderosa para trabalhar com texto, permitindo buscar, substituir e validar strings com padrões complexos. Em Swift para iOS e macOS, o trabalho com regex é implementado através da classe NSRegularExpression do framework Foundation. Neste artigo, vamos abordar todos os aspectos principais: desde a criação de padrões simples até o processamento de resultados e otimização de performance.



O artigo será útil tanto para iniciantes que estão conhecendo Swift, quanto para desenvolvedores experientes que desejam aprofundar seus conhecimentos sobre manipulação de texto em aplicativos iOS/macOS.



1. Fundamentos do trabalho com NSRegularExpression



A classe NSRegularExpression é a principal ferramenta para trabalhar com expressões regulares em Swift. Ela fornece métodos para busca, substituição e extração de dados de strings.



1.1. Criando uma expressão regular



Para criar um objeto NSRegularExpression, usa-se um inicializador que recebe uma string com o padrão e flags opcionais (NSRegularExpression.Options). A construção é envolvida em try, pois pode lançar um erro se a sintaxe do padrão for inválida.



import Foundation

let pattern = "\\\\d{3}-\\\\d{2}-\\\\d{4}" // Exemplo: 123-45-6789do { let regex = try NSRegularExpression(pattern: pattern, options: []) print("Expressão regular criada com sucesso")} catch { print("Erro na sintaxe da expressão regular: \\(error.localizedDescription)")}


1.2. Opções principais (NSRegularExpression.Options)



As opções permitem alterar o comportamento da expressão regular. Aqui estão as mais usadas:



  • .caseInsensitive — ignorar diferença entre maiúsculas e minúsculas (A = a).
  • .allowCommentsAndWhitespace — ignorar espaços e comentários no padrão.
  • .dotMatchesLineSeparators — o ponto (.) também corresponde a caracteres de quebra de linha.
  • .anchorsMatchLines — os caracteres ^ e $ correspondem ao início e fim de cada linha, não da string inteira.


Exemplo com a opção .caseInsensitive:



let pattern = "hello"let regex = try NSRegularExpression(pattern: pattern, options: .caseInsensitive)let testString = "Hello, World!"let range = NSRange(location: 0, length: testString.utf16.count)if regex.firstMatch(in: testString, options: [], range: range) != nil {    print("Correspondência encontrada") // Exibe: Correspondência encontrada}


2. Busca de correspondências e trabalho com resultados



Após criar a expressão regular, é possível realizar buscas de correspondências na string. Para isso, usam-se os métodos firstMatch e matches.



2.1. Buscando a primeira correspondência



O método firstMatch(in:options:range:) retorna a primeira correspondência encontrada como um objeto NSTextCheckingResult (ou nil, se nada for encontrado).



let text = "Meu número: 123-45-6789, e também 987-65-4321"let pattern = "\\\\d{3}-\\\\d{2}-\\\\d{4}"let regex = try NSRegularExpression(pattern: pattern, options: [])let range = NSRange(location: 0, length: text.utf16.count)

if let match = regex.firstMatch(in: text, options: [], range: range) { let matchedString = (text as NSString).substring(with: match.range) print("Primeira correspondência: \\(matchedString)") // 123-45-6789}


2.2. Buscando todas as correspondências



O método matches(in:options:range:) retorna um array com todas as correspondências. Isso é útil quando é necessário processar cada ocorrência do padrão.



let text = "Códigos: ABC-123, DEF-456, GHI-789"let pattern = "[A-Z]{3}-\\\\d{3}"let regex = try NSRegularExpression(pattern: pattern, options: [])let range = NSRange(location: 0, length: text.utf16.count)let matches = regex.matches(in: tex                

Blogs

Book Recommendations