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: uma ferramenta poderosa para trabalhar com texto

Expressões regulares (regex) são uma ferramenta indispensável para desenvolvedores iOS e macOS. Elas permitem realizar buscas complexas, substituições e validação de dados textuais usando padrões compactos. Em Swift, o trabalho com expressões regulares é implementado através da classe NSRegularExpression do Foundation framework. Neste artigo, vamos analisar todos os aspectos do uso de regex em Swift: desde a sintaxe básica até técnicas avançadas, com exemplos práticos para aplicativos iOS e macOS.



Fundamentos do NSRegularExpression em Swift

Para trabalhar com expressões regulares em Swift, utiliza-se a classe NSRegularExpression. Ela fornece métodos poderosos para busca, substituição e extração de dados de strings. Vamos analisar a sintaxe básica de inicialização:



import Foundation

let pattern = "\\\\d{3}-\\\\d{2}-\\\\d{4}" // Padrão para SSNlet text = "Meu SSN: 123-45-6789"

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


Observe o escape da barra invertida nas strings Swift. Para cada barra invertida no padrão, é necessário colocar duas (\\\\d em vez de \\d).



Criação e configuração da expressão regular

O construtor NSRegularExpression aceita um parâmetro opcional options, que permite configurar o comportamento do regex:



  • .caseInsensitive — ignorar maiúsculas/minúsculas
  • .dotMatchesLineSeparators — ponto corresponde a caracteres de quebra de linha
  • .anchorsMatchLines — âncoras ^ e $ funcionam para cada linha
  • .useUnixLineSeparators — usar apenas como separador de linhas


let regex = try NSRegularExpression(    pattern: "swift",    options: [.caseInsensitive])// Agora o padrão encontrará "Swift", "SWIFT", "swift" etc.


Busca e extração de dados com regex

Uma das principais tarefas das expressões regulares é a busca por substrings que correspondam ao padrão. Em Swift, isso é feito através do método matches(in:options:range:).



Busca de todas as correspondências

let text = "Contatos: email@example.com, support@test.org, admin@site.com"let emailPattern = "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Za-z]{2,}"

let regex = try NSRegularExpression(pattern: emailPattern)let matches = regex.matches(in: text, range: NSRange(text.startIndex..., in: text))

print("Emails encontrados: \\(matches.count)")for match in matches { if let range = Range(match.range, in: text) { print(String(text[range])) }}// Saída:// Emails encontrados: 3// email@example.com// support@test.org// admin@site.com


Busca com captura de grupos

Grupos entre parênteses permitem extrair partes da correspondência. Isso é especialmente útil para parsing de dados estruturados:



let logLine = "2024-01-15 14:30:22 [ERROR] Falha ao conectar ao servidor"let logPattern = "(\\\\d{4}-\\\\d{2}-\\\\d{2}) (\\\\d{2}:\\\\d{2}:\\\\d{2}) \\\\[(\\\\w+)\\\\] (.+)"

let regex = try NSRegularExpression(pattern: logPattern)if let match = regex.firstMatch(in: logLine, range: NSRange(logLine.startIndex..., in: logLine)) { let dateRange = Range(match.range(at: 1), in: logLine)! let timeRange = Range(match.range(at: 2), in: logLine)! let levelRange = Range(match.range(at: 3), in: logLine)! let messageRange = Range(match.range(at: 4), in: logLine)! print("Data: \\(logLine[dateRange])") print("Hora: \\(logL

Blogs

Book Recommendations