Las expresiones regulares, a menudo abreviadas como regex o regexp, son herramientas poderosas para trabajar con patrones de texto en Ruby. Te permiten buscar, encontrar coincidencias, extraer y manipular cadenas basadas en patrones específicos. Ya sea que estés validando la entrada del usuario, analizando datos o realizando un procesamiento de texto complejo, las expresiones regulares de Ruby proporcionan una solución concisa y flexible.
Este tutorial te guiará a través de los fundamentos de las expresiones regulares en Ruby, desde la sintaxis básica hasta las técnicas avanzadas.
Los desarrolladores de Ruby que buscan optimizar su flujo de trabajo de pruebas de API deberían considerar Apidog, una alternativa poderosa que supera a Postman en varios aspectos clave.
Apidog combina documentación de API, depuración, pruebas automatizadas y simulación en una plataforma cohesiva, ofreciendo una experiencia más integrada que el enfoque fragmentado de Postman.

Con su interfaz intuitiva, validación de esquema incorporada y funciones integrales de colaboración en equipo, Apidog facilita significativamente la gestión de proyectos de API complejos.

Los desarrolladores de Ruby apreciarán el sólido soporte de Apidog para la automatización a través de su interfaz de línea de comandos, la integración perfecta de Git para el control de versiones y la compatibilidad superior con OpenAPI/Swagger, esencial para mantener una documentación precisa junto con sus aplicaciones Ruby.

Ya sea que estés construyendo servicios RESTful con Rails o creando microservicios con Sinatra, el conjunto de herramientas todo en uno de Apidog elimina el cambio de contexto que afecta a los usuarios de Postman, lo que te permite concentrarte en lo que más importa: escribir un excelente código Ruby.
Creación de Expresiones Regulares en Ruby
En Ruby, hay varias formas de crear expresiones regulares:
Método 1: Usando Barras en Expresiones Regulares de Ruby
La forma más común de crear una expresión regular en Ruby es encerrando el patrón entre barras inclinadas:
/Ruby/ # Crea una expresión regular que coincide con "Ruby"
Método 2: Usando Notación de Porcentaje para Expresiones Regulares de Ruby
También puedes usar la notación de porcentaje con el indicador %r
:
%r(Ruby) # Igual que /Ruby/
Esto es particularmente útil cuando tu patrón contiene muchas barras inclinadas, ya que ayuda a evitar el escape excesivo.
Método 3: Usando la Clase Regexp para Expresiones Regulares de Ruby
Otro enfoque es usar el constructor Regexp.new
:
Regexp.new("Ruby") # Igual que /Ruby/
Todos estos métodos crean instancias de la clase Regexp
.
Símbolos Básicos de Expresiones Regulares de Ruby
Las expresiones regulares de Ruby usan símbolos especiales para representar diferentes patrones. Aquí están los fundamentales:
Símbolo | Descripción | Ejemplo | Coincidencias |
---|---|---|---|
. |
Coincide con cualquier carácter individual | /a.b/ |
"axb", "a2b", "a b" |
* |
Coincide con 0 o más del elemento precedente | /ab*c/ |
"ac", "abc", "abbc" |
+ |
Coincide con 1 o más del elemento precedente | /ab+c/ |
"abc", "abbc", "abbbc" |
? |
Coincide con 0 o 1 del elemento precedente | /ab?c/ |
"ac", "abc" |
\| |
Alternancia (OR) | /cat\|dog/ |
"cat", "dog" |
[] |
Clase de carácter - coincide con cualquier carácter listado | /[aeiou]/ |
"a", "e", "i", "o", "u" |
() |
Crea un grupo de captura | /(abc)+/ |
"abc", "abcabc" |
^ |
Coincide con el inicio de una cadena | /^start/ |
"start of string" |
$ |
Coincide con el final de una cadena | /end$/ |
"the end" |
\\\\ |
Escapa un carácter especial | /\\\\\\\\/ |
"\" |
Caracteres Especiales en Expresiones Regulares de Ruby
Las expresiones regulares de Ruby incluyen clases de caracteres predefinidas que hacen que la coincidencia de patrones sea más conveniente:
Símbolo | Descripción | Ejemplo | Coincidencias |
---|---|---|---|
\\\\d |
Coincide con cualquier dígito (0-9) | /\\\\d+/ |
"123", "9" |
\\\\D |
Coincide con cualquier no dígito | /\\\\D+/ |
"abc", "!@#" |
\\\\w |
Coincide con cualquier carácter de palabra (alfanumérico + guion bajo) | /\\\\w+/ |
"ruby123", "user_name" |
\\\\W |
Coincide con cualquier carácter que no sea de palabra | /\\\\W+/ |
"!@#", " " |
\\\\s |
Coincide con cualquier carácter de espacio en blanco | /\\\\s+/ |
" ", "\t", "\n" |
\\\\S |
Coincide con cualquier carácter que no sea de espacio en blanco | /\\\\S+/ |
"hello", "123" |
\\\\A |
Coincide con el principio de una cadena | /\\\\AHello/ |
"Hello world" |
\\\\z |
Coincide con el final de una cadena | /world\\\\z/ |
"Hello world" |
\\\\Z |
Coincide con el final de una cadena o antes de la nueva línea final | /world\\\\Z/ |
"Hello world\n" |
Cuantificadores en Expresiones Regulares de Ruby
Los cuantificadores te permiten especificar cuántas veces debe coincidir un patrón:
Cuantificador | Descripción | Ejemplo | Coincidencias |
---|---|---|---|
* |
0 o más repeticiones | /ab*c/ |
"ac", "abc", "abbc" |
+ |
1 o más repeticiones | /ab+c/ |
"abc", "abbc" |
? |
0 o 1 repetición | /colou?r/ |
"color", "colour" |
{n} |
Exactamente n repeticiones | /a{3}/ |
"aaa" |
{n,} |
Al menos n repeticiones | /a{2,}/ |
"aa", "aaa", "aaaa" |
{n,m} |
Entre n y m repeticiones | /a{2,4}/ |
"aa", "aaa", "aaaa" |
Por ejemplo, para coincidir con un formato de número de teléfono como "123-456-7890", podrías usar:
/\\\\d{3}-\\\\d{3}-\\\\d{4}/
Coincidencia de Patrones con Expresiones Regulares de Ruby
Usando el Operador de Coincidencia en Expresiones Regulares de Ruby
La forma más básica de verificar si un patrón coincide con una cadena es usar el operador =~
:
text = "The quick brown fox"
if /quick/ =~ text
puts "Coincidencia encontrada en el índice #{$~.begin(0)}"
else
puts "No se encontró ninguna coincidencia"
end
El operador =~
devuelve el índice de la primera coincidencia o nil
si no se encuentra ninguna coincidencia. Después de una coincidencia exitosa, puedes usar Regexp.last_match
o la variable global $~
para acceder a la información sobre la coincidencia.
Captura de Grupos en Expresiones Regulares de Ruby
Puedes usar paréntesis para crear grupos de captura y extraer partes específicas de una coincidencia:
text = "Name: John, Age: 30"
if match_data = /Name: (\\\\w+), Age: (\\\\d+)/.match(text)
name = match_data[1] # Primer grupo de captura
age = match_data[2] # Segundo grupo de captura
puts "Name: #{name}, Age: #{age}"
end
Extracción de Contenido Coincidente en Expresiones Regulares de Ruby
Para extraer todas las ocurrencias de un patrón, usa el método scan
:
text = "Contact us at support@example.com or info@example.org"
emails = text.scan(/\\\\w+@\\\\w+\\\\.\\\\w+/)
puts emails.inspect # ["support@example.com", "info@example.org"]
Trabajando con Expresiones Regulares de Ruby en la Práctica
Reemplazo de Cadenas con Expresiones Regulares de Ruby
El método gsub
te permite reemplazar todas las ocurrencias de un patrón con una cadena especificada:
text = "apple banana apple"
new_text = text.gsub(/apple/, "orange")
puts new_text # "orange banana orange"
También puedes usar un bloque para reemplazos más complejos:
text = "The price is $10"
new_text = text.gsub(/\\\\$(\\\\d+)/) do |match|
"$#{$1.to_i * 1.1}" # Aumentar el precio en un 10%
end
puts new_text # "The price is $11"
Alternancia en Expresiones Regulares de Ruby
El símbolo de barra vertical (|
) te permite coincidir con un patrón u otro:
/cat|dog/.match("I have a cat") # Coincide con "cat"
/cat|dog/.match("I have a dog") # Coincide con "dog"
Puedes usar paréntesis para agrupar alternativas:
/(apple|banana) pie/.match("I love apple pie") # Coincide con "apple pie"
Clases de Caracteres en Expresiones Regulares de Ruby
Las clases de caracteres te permiten coincidir con cualquier carácter individual de un conjunto:
/[aeiou]/.match("hello") # Coincide con "e"
/[0-9]/.match("agent007") # Coincide con "0"
También puedes negar una clase de caracteres:
/[^0-9]/.match("agent007") # Coincide con "a"
Operaciones de Cadena con Expresiones Regulares de Ruby
Coincidencias de Inicio y Fin en Expresiones Regulares de Ruby
Ruby proporciona métodos convenientes para verificar si una cadena comienza o termina con un patrón específico:
"Hello, World!".start_with?("Hello") # true
"Hello, World!".end_with?("World!") # true
Si bien estos métodos no se basan en regex, a menudo se usan junto con expresiones regulares para tareas de manipulación de cadenas.
Variables Globales en Expresiones Regulares de Ruby
Después de una coincidencia exitosa, Ruby establece varias variables globales:
$&
- El texto coincidente completo- `$`` - La porción de la cadena antes de la coincidencia
$'
- La porción de la cadena después de la coincidencia
/bb/ =~ "aabbcc"
puts $` # "aa"
puts $& # "bb"
puts $' # "cc"
Modificadores para Expresiones Regulares de Ruby
Las expresiones regulares de Ruby admiten varios modificadores que cambian la forma en que se interpretan los patrones:
Modificador | Descripción | Ejemplo |
---|---|---|
i |
Coincidencia sin distinción entre mayúsculas y minúsculas | /ruby/i coincide con "Ruby", "RUBY", "rUbY" |
m |
Modo multilínea (el punto coincide con la nueva línea) | /./m coincide con cualquier carácter, incluida la nueva línea |
x |
Modo extendido (permite comentarios y espacios en blanco) | /pattern # comment/x |
o |
Realiza interpolaciones #{} solo una vez | /#{pattern}/o |
u |
Codificación UTF-8 | /\\\\u{1F600}/u coincide con el emoji 😀 |
Ejemplos:
/ruby/ =~ "RUBY" # nil (sin coincidencia)
/ruby/i =~ "RUBY" # 0 (coincidencia al principio)
# Sin el modificador 'm', el punto no coincide con las nuevas líneas
/a.b/ =~ "a\\\\nb" # nil
# Con el modificador 'm', el punto también coincide con las nuevas líneas
/a.b/m =~ "a\\\\nb" # 0
Técnicas Avanzadas de Expresiones Regulares de Ruby
Grupos Sin Captura en Expresiones Regulares de Ruby
A veces necesitas agrupar sin capturar el texto coincidente:
/(?:ab)+c/.match("ababc") # Coincide con "ababc" sin capturar "ab"
Lookahead y Lookbehind en Expresiones Regulares de Ruby
Las aserciones de lookahead te permiten coincidir con un patrón solo si está seguido por otro patrón:
# Coincide con 'apple' solo si está seguido por 'pie'
/apple(?= pie)/.match("apple pie") # Coincide con "apple"
/apple(?= pie)/.match("apple tart") # Sin coincidencia
# Coincide con 'apple' solo si NO está seguido por 'pie'
/apple(?! pie)/.match("apple tart") # Coincide con "apple"
Las aserciones de lookbehind funcionan de manera similar, pero verifican lo que viene antes:
# Coincide con 'pie' solo si está precedido por 'apple'
/(?<=apple )pie/.match("apple pie") # Coincide con "pie"
/(?<=apple )pie/.match("cherry pie") # Sin coincidencia
Consejos de Rendimiento para Expresiones Regulares de Ruby
- Sé específico: Los patrones más específicos funcionan mejor que los generales
- Evita el retroceso excesivo: Los patrones complejos con muchos cuantificadores pueden provocar problemas de rendimiento
- Usa anclajes: Cuando sea apropiado, usa
\\\\A
,\\\\z
,^
y$
para limitar dónde pueden ocurrir las coincidencias - Considera alternativas: A veces, los métodos de cadena simples como
include?
ostart_with?
son más rápidos que regex para casos simples
Conclusión sobre las Expresiones Regulares de Ruby
Las expresiones regulares de Ruby son una herramienta poderosa en tu conjunto de herramientas de programación. Te permiten realizar un procesamiento de texto complejo con una sintaxis concisa. Si bien la sintaxis puede parecer intimidante al principio, dominar las expresiones regulares aumentará significativamente tu productividad al trabajar con texto en Ruby.
La práctica es clave para ser competente con las expresiones regulares. Comienza con patrones simples e incorpora gradualmente características más complejas a medida que te sientas cómodo con los conceptos básicos. Muchas herramientas en línea como Rubular (https://rubular.com/) pueden ayudarte a probar y depurar tus expresiones regulares de forma interactiva.
Al comprender los conceptos cubiertos en este tutorial, estarás bien equipado para abordar una amplia gama de desafíos de manipulación de cadenas en tus proyectos de Ruby.