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

Introdução às expressões regulares em Swift

\n\n

Expressões regulares (regex) são uma ferramenta poderosa para buscar, extrair e substituir texto com base em padrões. Em Swift, o trabalho com expressões regulares é implementado através da classe NSRegularExpression do framework Foundation, bem como através de métodos integrados de strings. É uma ferramenta indispensável no desenvolvimento de aplicativos iOS e macOS para validação de formulários, análise de dados, filtragem de texto e muitas outras tarefas.

\n\n

Neste artigo, exploraremos os principais recursos para trabalhar com expressões regulares em Swift com exemplos práticos. Você aprenderá como criar padrões, realizar buscas, substituições e extração de dados.

\n\n

Fundamentos do trabalho com NSRegularExpression

\n\n

A classe NSRegularExpression é a principal forma de trabalhar com expressões regulares em Swift. Vamos analisar as operações básicas.

\n\n

Criando uma expressão regular

\n\n
import Foundation\n\nlet pattern = "[A-Za-z]+@[A-Za-z]+\\\\.[A-Za-z]+"\nguard let regex = try? NSRegularExpression(pattern: pattern) else {\n    fatalError("Padrão inválido")\n}
\n\n

Observe a barra invertida dupla \\\\ — em Swift, as strings exigem o escape da barra invertida.

\n\n

Buscando a primeira correspondência

\n\n
let text = "Entre em contato conosco pelo email: support@example.com"\nlet nsString = text as NSString\nlet range = NSRange(location: 0, length: nsString.length)\n\nif let match = regex.firstMatch(in: text, range: range) {\n    let email = nsString.substring(with: match.range)\n    print("Email encontrado: \\(email)") // support@example.com\n}
\n\n

Buscando todas as correspondências

\n\n
let text = "Contatos: info@site.com, admin@site.com, support@site.com"\nlet matches = regex.matches(in: text, range: NSRange(location: 0, length: text.count))\n\nfor match in matches {\n    let range = match.range\n    let email = (text as NSString).substring(with: range)\n    print(email)\n}\n// Saída:\n// info@site.com\n// admin@site.com\n// support@site.com
\n\n

Usando grupos de captura

\n\n

Grupos de captura permitem extrair partes de uma correspondência. Em Swift, os grupos são indicados por parênteses ().

\n\n

Extraindo dados com grupos

\n\n
let pattern = "(\\\\d{4})-(\\\\d{2})-(\\\\d{2})"\nlet dateString = "Hoje: 2024-03-15"\n\nguard let regex = try? NSRegularExpression(pattern: pattern) else { return }\nlet nsString = dateString as NSString\n\nif let match = regex.firstMatch(in: dateString, range: NSRange(location: 0, length: nsString.length)) {\n    let fullDate = nsString.substring(with: match.range) // 2024-03-15\n    let year = nsString.substring(with: match.range(at: 1)) // 2024\n    let month = nsString.substring(with: match.range(at: 2)) // 03\n    let day = nsString.substring(with: match.range(at: 3)) // 15\n    \n    print("Ano: \\(year), Mês: \\(month), Dia: \\(day)")\n}
\n\n

Grupos nomeados (trabalhando com Range)

\n\n

A partir do Swift 5.7, é possível usar uma sintaxe mais conveniente com Range:

\n\n
let text = "Preço: 1500 rublos"\nlet pattern = #"(\\d+)\\srublos"#\n\nif let range = text.range(of: pattern, options: .regularExpression) {\n    let match = text[range]\n    print("Encontrado: \\(match)") // 1500 rublos\n}
\n\n

Substituição de texto com expressões regulares

\n\n

Um dos recursos mais úteis é a substituição de partes do texto com base em um padrão.

\n\n

Substituição simples

\n\n
let text = "Ligue para o número +7 (123) 456-78-90"\nlet pattern = "\\\\+7\\\\s\\\\(\\\\d{3}\\\\)\\\\s\\\\d{3}-\\\\d{2}-\\\\d{2}"\nlet replacement = "[número oculto]"\n\nguard let regex = try? NSRegularExpression(pattern: pattern) else { return }\nlet modifiedText = regex.stringByReplacingMatches(\n    in: text,\n    range: NSRange(location: 0, length: text.count),\n    withTemplate: replacement\n)\n\nprint(modifiedText) // Ligue para o número [número oculto]
\n\n

Substituição

Blogs

Book Recommendations