0Pricing
Swift Academy · Aula

Grupos de Captura

Extraia substrings das correspondências.

Grupos de Captura é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Swift Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Swift Academy inclui 4 aulas no total.

Grupos de captura

Parênteses em uma expressão regular criam grupos de captura. Cada grupo memoriza a substring correspondente, para que você possa extrair partes estruturadas de uma correspondência maior.

Uma única captura

Envolver parte de um padrão em () faz sua captura. A saída da correspondência se torna uma tupla: primeiro a correspondência inteira e depois cada captura.

if let m = "v2".firstMatch(of: /v(\d+)/) {
    print("Whole: \(m.0)")
    print("Group: \(m.1)")
}

Várias capturas

Cada par de parênteses adiciona outro elemento à tupla de saída, na ordem da esquerda para a direita.

if let m = "2024-05-30".wholeMatch(of: /(\d{4})-(\d{2})-(\d{2})/) {
    print("Year: \(m.1)")
    print("Month: \(m.2)")
    print("Day: \(m.3)")
}

A correspondência inteira é .0

O elemento .0 da saída é sempre o texto correspondente completo. As capturas começam em .1.

if let m = "key=value".wholeMatch(of: /(\w+)=(\w+)/) {
    print("Full: \(m.0)")
    print("Key: \(m.1), Value: \(m.2)")
}

As capturas são substrings

Por padrão, as capturas são valores Substring que apontam para a string original. Converta-as com String(...) se precisar mantê-las.

if let m = "abc123".firstMatch(of: /([a-z]+)(\d+)/) {
    let letters = String(m.1)
    let numbers = String(m.2)
    print(letters, numbers)
}

Capturas opcionais

Se um grupo for opcional (seguido de ?), sua captura poderá ser nil quando ele não participar da correspondência.

if let m = "color".wholeMatch(of: /colou?(r)/) {
    print("Captured: \(m.1)")
}

Capturas nomeadas

Você pode nomear um grupo com (?<name>...) e lê-lo pela saída nomeada, que é mais clara que os índices numéricos.

let re = /(?<area>\d{3})-(?<line>\d{4})/
if let m = "555-1234".wholeMatch(of: re) {
    print("Area: \(m.area)")
    print("Line: \(m.line)")
}

Iterando sobre capturas

Combine capturas com matches(of:) para extrair dados estruturados de várias correspondências de uma só vez.

let log = "a=1 b=2 c=3"
for m in log.matches(of: /(\w+)=(\d+)/) {
    print("\(m.1) -> \(m.2)")
}

Grupos aninhados

Os grupos podem ser aninhados. O grupo externo captura o conjunto completo, enquanto os grupos internos capturam partes dele. A numeração segue a ordem dos parênteses de abertura.

if let m = "12:30".wholeMatch(of: /((\d+):(\d+))/) {
    print("All: \(m.1)")
    print("H: \(m.2), M: \(m.3)")
}

Grupos sem captura

Use (?:...) para agrupar sem capturar, quando você só precisar do agrupamento para um quantificador e não quiser um elemento extra na tupla.

if let m = "abab".wholeMatch(of: /(?:ab)+/) {
    print("Matched: \(m.0)")
}

Criando um analisador

As capturas transformam texto bruto em valores tipados. Aqui, analisamos uma string de coordenadas e a transformamos em números inteiros.

func parsePoint(_ s: String) -> (Int, Int)? {
    guard let m = s.wholeMatch(of: /(\d+),(\d+)/),
          let x = Int(m.1), let y = Int(m.2) else { return nil }
    return (x, y)
}
print(parsePoint("3,7") ?? "nil")

Verificação rápida

Para o padrão /(\d{4})-(\d{2})/, que corresponde a "2024-05", qual é o valor de m.2?

Recapitulação

Os parênteses criam grupos de captura acessíveis como uma tupla, na qual .0 é a correspondência inteira e .1, .2... são as capturas. Você conheceu grupos nomeados, opcionais, aninhados e sem captura. A seguir, você criará expressões regulares a partir de código Swift legível com RegexBuilder.

Perguntas Frequentes

A aula “Grupos de Captura” é grátis?

Sim — o texto completo de “Grupos de Captura” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Swift Academy, atualize para CoddyKit PRO. O curso de Swift Academy inclui 4 aulas no total.

O que vou aprender em “Grupos de Captura”?

Extraia substrings das correspondências. Você pratica Swift Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Swift Academy?

Nenhuma experiência prévia é necessária. Swift Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Grupos de Captura”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Swift Academy?

Sim. Cada aula de Swift Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Literais de Regex e Correspondência
  2. Grupos de Captura
  3. DSL do RegexBuilder
  4. Substituição e Divisão de Texto
← Voltar para Swift Academy