Apidog

Plataforma Colaborativa All-in-one para Desenvolvimento de API

Design de API

Documentação de API

Depuração de API

Mock de API

Testes Automatizados de API

Expressões Regulares em Ruby: Explicadas de Forma Clara

@apidog

@apidog

Updated on março 28, 2025

Expressões regulares, frequentemente abreviadas como regex ou regexp, são ferramentas poderosas para trabalhar com padrões de texto em Ruby. Elas permitem que você busque, combine, extraia e manipule strings com base em padrões específicos. Seja validando a entrada do usuário, analisando dados ou realizando processamento complexo de texto, as expressões regulares do Ruby oferecem uma solução concisa e flexível.

Este tutorial o guiará pelos fundamentos das expressões regulares em Ruby, desde a sintaxe básica até técnicas avançadas.


Para desenvolvedores Ruby que buscam simplificar seu fluxo de trabalho de teste de API, o Apidog deve ser considerado, uma alternativa poderosa que se destaca em vários aspectos em relação ao Postman.

O Apidog combina documentação de API, depuração, testes automatizados e simulação em uma única plataforma coesa, oferecendo uma experiência mais integrada do que a abordagem fragmentada do Postman.

Com sua interface intuitiva, validação de esquema embutida e recursos abrangentes de colaboração em equipe, o Apidog torna a gestão de projetos de API complexos significativamente mais fácil.

Os desenvolvedores Ruby apreciarão o robusto suporte do Apidog para automação através de sua interface de linha de comando, integração fluida com Git para controle de versão e compatibilidade superior com OpenAPI/Swagger - essencial para manter documentação precisa ao lado de suas aplicações Ruby.

Se você está construindo serviços RESTful com Rails ou criando microserviços com Sinatra, a caixa de ferramentas tudo-em-um do Apidog elimina a troca de contexto que aflige os usuários do Postman, permitindo que você se concentre no que importa: escrever um ótimo código Ruby.

botão

Criando Expressões Regulares em Ruby

Em Ruby, existem várias maneiras de criar expressões regulares:

Método 1: Usando Barras em Expressões Regulares Ruby

A forma mais comum de criar uma expressão regular em Ruby é envolvendo o padrão entre barras:

/Ruby/  # Cria uma expressão regular que combina "Ruby"

Método 2: Usando Notação Percentual para Expressões Regulares em Ruby

Você também pode usar a notação percentual com o indicador %r:

%r(Ruby)  # Igual a /Ruby/

Isso é particularmente útil quando seu padrão contém muitas barras, pois ajuda a evitar escapes excessivos.

Método 3: Usando a Classe Regexp para Expressões Regulares em Ruby

Outra abordagem é usar o construtor Regexp.new:

Regexp.new("Ruby")  # Igual a /Ruby/

Todos esses métodos criam instâncias da classe Regexp.

Símbolos Básicos de Expressões Regulares em Ruby

As expressões regulares em Ruby usam símbolos especiais para representar diferentes padrões. Aqui estão os fundamentais:

Símbolo Descrição Exemplo Combina
. Combina qualquer único caractere /a.b/ "axb", "a2b", "a b"
* Combina 0 ou mais do elemento anterior /ab*c/ "ac", "abc", "abbc"
+ Combina 1 ou mais do elemento anterior /ab+c/ "abc", "abbc", "abbbc"
? Combina 0 ou 1 do elemento anterior /ab?c/ "ac", "abc"
\| Alternância (OU) /cat\|dog/ "cat", "dog"
[] Classe de caracteres - combina qualquer caractere listado /[aeiou]/ "a", "e", "i", "o", "u"
() Cria um grupo de captura /(abc)+/ "abc", "abcabc"
^ Combina o início de uma string /^start/ "início da string"
$ Combina o final de uma string /end$/ "o fim"
\\\\ Escapa um caractere especial /\\\\\\\\/ "\"

Caracteres Especiais em Expressões Regulares Ruby

As expressões regulares Ruby incluem classes de caracteres predefinidas que tornam a correspondência de padrões mais conveniente:

Símbolo Descrição Exemplo Combina
\\\\d Combina qualquer dígito (0-9) /\\\\d+/ "123", "9"
\\\\D Combina qualquer não dígito /\\\\D+/ "abc", "!@#"
\\\\w Combina qualquer caractere de palavra (alfanumérico + sublinhado) /\\\\w+/ "ruby123", "user_name"
\\\\W Combina qualquer caractere que não seja de palavra /\\\\W+/ "!@#", " "
\\\\s Combina qualquer caractere de espaço em branco /\\\\s+/ " ", "\t", "\n"
\\\\S Combina qualquer caractere que não seja espaço em branco /\\\\S+/ "hello", "123"
\\\\A Combina o início de uma string /\\\\AHello/ "Hello world"
\\\\z Combina o final de uma string /world\\\\z/ "Hello world"
\\\\Z Combina o final de uma string ou antes da nova linha final /world\\\\Z/ "Hello world\n"

Quantificadores em Expressões Regulares Ruby

Os quantificadores permitem que você especifique quantas vezes um padrão deve combinar:

Quantificador Descrição Exemplo Combina
* 0 ou mais repetições /ab*c/ "ac", "abc", "abbc"
+ 1 ou mais repetições /ab+c/ "abc", "abbc"
? 0 ou 1 repetição /colou?r/ "color", "colour"
{n} Exatamente n repetições /a{3}/ "aaa"
{n,} Pelo menos n repetições /a{2,}/ "aa", "aaa", "aaaa"
{n,m} Entre n e m repetições /a{2,4}/ "aa", "aaa", "aaaa"

Por exemplo, para combinar um formato de número de telefone como "123-456-7890", você poderia usar:

/\\\\d{3}-\\\\d{3}-\\\\d{4}/

Correspondência de Padrões com Expressões Regulares Ruby

Usando o Operador de Correspondência nas Expressões Regulares Ruby

A maneira mais básica de verificar se um padrão combina com uma string é usando o operador =~:

text = "The quick brown fox"
if /quick/ =~ text
  puts "Correspondência encontrada no índice #{$~.begin(0)}"
else
  puts "Nenhuma correspondência encontrada"
end

O operador =~ retorna o índice da primeira correspondência ou nil se nenhuma correspondência for encontrada. Após uma correspondência bem-sucedida, você pode usar Regexp.last_match ou a variável global $~ para acessar informações sobre a correspondência.

Grupos de Captura em Expressões Regulares Ruby

Você pode usar parênteses para criar grupos de captura e extrair partes específicas de uma correspondência:

text = "Nome: John, Idade: 30"
if match_data = /Nome: (\\\\w+), Idade: (\\\\d+)/.match(text)
  name = match_data[1]  # Primeiro grupo de captura
  age = match_data[2]   # Segundo grupo de captura
  puts "Nome: #{name}, Idade: #{age}"
end

Extraindo Conteúdo Correspondente em Expressões Regulares Ruby

Para extrair todas as ocorrências de um padrão, use o método scan:

text = "Entre em contato conosco em support@example.com ou info@example.org"
emails = text.scan(/\\\\w+@\\\\w+\\\\.\\\\w+/)
puts emails.inspect  # ["support@example.com", "info@example.org"]

Trabalhando com Expressões Regulares Ruby na Prática

Substituição de Strings com Expressões Regulares Ruby

O método gsub permite que você substitua todas as ocorrências de um padrão por uma string especificada:

text = "maçã banana maçã"
new_text = text.gsub(/maçã/, "laranja")
puts new_text  # "laranja banana laranja"

Você também pode usar um bloco para substituições mais complexas:

text = "O preço é $10"
new_text = text.gsub(/\\\\$(\\\\d+)/) do |match|
  "$#{$1.to_i * 1.1}"  # Aumentar o preço em 10%
end
puts new_text  # "O preço é $11"

Alternância em Expressões Regulares Ruby

O símbolo de pipe (|) permite que você combine um padrão ou outro:

/cat|dog/.match("Eu tenho um gato")  # Combina "gato"
/cat|dog/.match("Eu tenho um cachorro")  # Combina "cachorro"

Você pode usar parênteses para agrupar alternativas:

/(maçã|banana) torta/.match("Eu adoro torta de maçã")  # Combina "torta de maçã"

Classes de Caracteres em Expressões Regulares Ruby

Classes de caracteres permitem que você combine qualquer único caractere de um conjunto:

/[aeiou]/.match("olá")  # Combina "o"
/[0-9]/.match("agente007")  # Combina "0"

Você também pode negar uma classe de caracteres:

/[^0-9]/.match("agente007")  # Combina "a"

Operações de String com Expressões Regulares Ruby

Início e Fim de Correspondências em Expressões Regulares Ruby

Ruby fornece métodos convenientes para verificar se uma string começa ou termina com um padrão específico:

"Olá, Mundo!".start_with?("Olá")  # true
"Olá, Mundo!".end_with?("Mundo!")   # true

Embora esses métodos não sejam baseados em regex, muitas vezes são usados junto com expressões regulares para tarefas de manipulação de strings.

Variáveis Globais em Expressões Regulares Ruby

Após uma correspondência bem-sucedida, Ruby define várias variáveis globais:

  • $& - O texto correspondente completo
  • $` - A parte da string antes da correspondência
  • $' - A parte da string após a correspondência
/bb/ =~ "aabbcc"
puts $`   # "aa"
puts $&   # "bb"
puts $'   # "cc"

Modificadores para Expressões Regulares Ruby

As expressões regulares Ruby suportam vários modificadores que mudam a forma como os padrões são interpretados:

Modificador Descrição Exemplo
i Combinação sem diferenciação entre maiúsculas e minúsculas /ruby/i combina "Ruby", "RUBY", "rUbY"
m Modo multilinha (o ponto combina nova linha) /./m combina qualquer caractere, incluindo nova linha
x Modo estendido (permite comentários e espaços em branco) /padrão # comentário/x
o Executa interações #{} apenas uma vez /#{padrão}/o
u Codificação UTF-8 /\\\\u{1F600}/u combina emoji 😀

Exemplos:

/ruby/ =~ "RUBY"    # nil (sem correspondência)
/ruby/i =~ "RUBY"   # 0 (correspondência no início)

# Sem o modificador 'm', o ponto não combina novas linhas
/a.b/ =~ "a\\\\nb"     # nil
# Com o modificador 'm', o ponto combina novas linhas também
/a.b/m =~ "a\\\\nb"    # 0

Técnicas Avançadas de Expressões Regulares Ruby

Grupos Não-Capturantes em Expressões Regulares Ruby

Às vezes, você precisa de agrupamento sem capturar o texto correspondente:

/(?:ab)+c/.match("ababc")  # Combina "ababc" sem capturar "ab"

Lookahead e Lookbehind em Expressões Regulares Ruby

Asserções lookahead permitem que você combine um padrão apenas se for seguido por outro padrão:

# Combinar 'maçã' apenas se seguido por 'torta'
/maçã(?= torta)/.match("maçã torta")  # Combina "maçã"
/maçã(?= torta)/.match("maçã torta de frutas") # Sem correspondência

# Combinar 'maçã' apenas se NÃO seguido por 'torta'
/maçã(?! torta)/.match("maçã tart") # Combina "maçã"

Asserções lookbehind funcionam de forma semelhante, mas verificam o que vem antes:

# Combinar 'torta' apenas se precedido por 'maçã'
/(?<=maçã )torta/.match("maçã torta")  # Combina "torta"
/(?<=maçã )torta/.match("uma torta de cereja") # Sem correspondência

Dicas de Desempenho para Expressões Regulares Ruby

  1. Seja específico: Padrões mais específicos têm melhor desempenho do que os gerais.
  2. Evite retrocessos excessivos: Padrões complexos com muitos quantificadores podem levar a problemas de desempenho.
  3. Use âncoras: Quando apropriado, use \\\\A, \\\\z, ^ e $ para limitar onde as correspondências podem ocorrer.
  4. Considere alternativas: Às vezes, métodos de string simples como include? ou start_with? são mais rápidos que regex para casos simples.

Conclusão sobre Expressões Regulares Ruby

As expressões regulares Ruby são uma ferramenta poderosa no seu conjunto de programação. Elas permitem que você realize processamento complexo de texto com uma sintaxe concisa. Embora a sintaxe possa parecer intimidadora a princípio, dominar expressões regulares aumentará significativamente sua produtividade ao trabalhar com texto em Ruby.

A prática é fundamental para se tornar proficiente em expressões regulares. Comece com padrões simples e incorpore gradualmente recursos mais complexos à medida que você se sentir confortável com os fundamentos. Muitas ferramentas online, como o Rubular (https://rubular.com/), podem ajudá-lo a testar e depurar suas expressões regulares interativamente.

Ao entender os conceitos abordados neste tutorial, você estará bem preparado para enfrentar uma ampla gama de desafios de manipulação de strings em seus projetos Ruby.