English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Expresión regularEs una secuencia especial de caracteres que utiliza patrones con una gramática específica para coincidir o buscar conjuntos de cadenas.
La expresión regular se compone de algunos caracteres específicos previamente definidos y sus combinaciones, formando una "cadena de reglas" que se utiliza para expresar un lógica de filtrado de cadenas.
Expresión regularEn términos generales, es un patrón entre dos barras oblicuas o entre cualquier delimitador que siga a %r, como se muestra a continuación:
/patrón/ /patrón/im # Se pueden especificar opciones %r!/usr/local! # Expresión regular con delimitadores
#!/usr/bin/ruby line1 = "Cats are smarter than dogs"; line2 = "Dogs also like meat"; if ( line1 =~ /Cats(.*)/ ) puts "Line1 contains Cats" end if ( line2 =~ /Cats(.*)/ ) puts "Line2 contains Dogs" end
El resultado de ejecutar el ejemplo anterior es:
Line1 contains Cats
La expresión regular puede contener un modificador opcional, que se utiliza para controlar各个方面 de la coincidencia. Los modificadores se especifican después del segundo carácter de barra oblicua, como se muestra en el ejemplo anterior. A continuación se lista los modificadores posibles:
Modificadores | descripción |
---|---|
i | Ignorar mayúsculas y minúsculas al coincidir con el texto. |
o | Ejecutar solo una vez la interpolación #{}, la expresión regular se evalúa en el primer intento. |
x | Ignorar los espacios en blanco, se permite insertar caracteres de espacio en blanco y comentarios en toda la expresión. |
m | Coincidir con múltiples líneas, considerando el carácter de nueva línea como un carácter normal. |
u,e,s,n | Interpretar la expresión regular como Unicode (UTF-8)、EUC、SJIS o ASCII. Si no se especifica un modificador, se considera que la expresión regular utiliza la codificación de origen. |
Al igual que las cadenas se separan mediante %Q, Ruby permite comenzar con %r como inicio de la expresión regular, seguido de cualquier separador. Esto es muy útil cuando se describe una gran cantidad de caracteres de diagonal invertida que no se desean escapar.
# Coincidir con el carácter de diagonal invertida sin escapar %r|/| # Caracteres de bandera se pueden coincidir con la siguiente sintaxis %r[</(.*)>]i
Además de los caracteres de control,(+ ? . * ^ $ ( ) [ ] { } | \),otros caracteres coinciden con ellos mismos. Puede escapar los caracteres de control colocando un carácter de retroceso delante de ellos.
La siguiente tabla enumera la sintaxis de expresiones regulares disponibles en Ruby.
Patrón | descripción |
---|---|
^ | Coincidir con el principio de la línea. |
$ | Coincidir con el final de la línea. |
. | Coincidir con cualquier carácter simple excepto el carácter de nueva línea. Al usar la opción m, también puede coincidir con el carácter de nueva línea. |
[...] | Coincidir con cualquier carácter simple que esté entre corchetes. |
[^...] | Coincidir con cualquier carácter simple que no esté entre corchetes. |
re* | Coincidir con la subexpresión anterior cero veces o más. |
re+ | Coincidir con la subexpresión anterior una vez o más. |
re? | Coincidir con la subexpresión anterior cero veces o una vez. |
re{ n} | Coincidir con la subexpresión anterior n veces. |
re{ n,} | Coincidir con la subexpresión anterior n veces o más. |
re{ n, m} | Coincidir con la subexpresión anterior al menos n veces y hasta m veces. |
a| b | Coincidir con a o b. |
(re) | Agrupar la expresión regular y recordar el texto coincidente. |
(?imx) | Abrir temporalmente las opciones i, m o x dentro de la expresión regular. Si están dentro de paréntesis, solo afecta a la parte dentro de los paréntesis. |
(?-imx) | Cerrar temporalmente las opciones i, m o x dentro de la expresión regular. Si están dentro de paréntesis, solo afecta a la parte dentro de los paréntesis. |
(?: re) | Agrupar la expresión regular sin recordar el texto coincidente. |
(?imx: re) | Abrir temporalmente las opciones i, m o x dentro de los paréntesis. |
(?-imx: re) | Cerrar temporalmente las opciones i, m o x dentro de los paréntesis. |
(?#...) | Comentario. |
(?= re) | Especificar la posición mediante el patrón. Sin rango. |
(?! re) | Especificar la posición mediante el negativo del patrón. Sin rango. |
(?> re) | Coincide con patrones independientes sin retroceso. |
\w | Coincide con caracteres de palabra. |
\W | Coincide con caracteres no de palabra. |
\s | Coincidir con el carácter blanco. Equivalente a [\t\n\r\f]。 |
\S | Coincidir con el carácter no blanco. |
\d | Coincidir con el carácter numérico. Equivalente a [0-9]。 |
\D | Coincidir con el carácter no numérico. |
\A | Coincidir con el principio de la cadena. |
\Z | Coincidir con el final de la cadena. Si existe un carácter de nueva línea, solo coincidirá con el carácter de nueva línea anterior. |
\z | Coincidir con el final de la cadena. |
\G | Coincidir con el punto que se ha coincidido recientemente. |
\b | Coincidirá con el límite de palabra cuando esté fuera de los paréntesis, y con la tecla de retroceso (0x08)。 |
\B | Coincidir con el límite no palabra. |
\n, \t, etc. | Coincidir con el carácter de nueva línea, el carácter de retorno de carro, el carácter de tabulación, etc. |
\1...\9 | Coincidir con la subexpresión de grupo n. |
\10 | Si ya se ha coincidido, coincidirá con la subexpresión de grupo n. De lo contrario, apuntará a la representación octal del código de caracteres. |
ejemplo | descripción |
---|---|
/ruby/ | Coincidir con "ruby" |
¥ | Coincidir con el símbolo de Yen. Ruby 1.9 y Ruby 1.8 Soporta múltiples caracteres. |
ejemplo | descripción |
---|---|
/[Rr]uby/ | Coincidir "Ruby" o "ruby" |
/rub[ye]/ | coincide con "ruby" o "rube" |
/[aeiou]/ | Coincidir con cualquier vocal minúscula |
/[0-9]/ | Coincidir con cualquier número, equivalente a /[0123456789]/ Igual |
/[a-z]/ | Coincidir con cualquier carácter minúscula ASCII |
/[A-Z]/ | Coincidir con cualquier carácter mayúscula ASCII |
/[a-zA-Z0-9]/ | Coincidir con cualquier carácter entre paréntesis |
/[^aeiou]/ | Coincidir con cualquier carácter no vocal minúscula |
/[^0-9]/ | Coincidir con cualquier carácter no numérico |
ejemplo | descripción |
---|---|
/./ | Coincidir cualquier carácter excepto el carácter de nueva línea |
/./m | En modo de múltiples líneas, también coincidirá con el carácter de nueva línea |
/\d/ | Coincidir un carácter numérico, equivalente a /[0-9]/ |
/\D/ | Coincidir un carácter no numérico, equivalente a /[^0-9]/ |
/\s/ | Coincidir un carácter blanco, equivalente a /[ \t\r\n\f]/ |
/\S/ | Coincidir un carácter no blanco, equivalente a /[^ \t\r\n\f]/ |
/\w/ | Coincidir un carácter de palabra, equivalente a /[A-Za-z0-9_]/ |
/\W/ | Coincidir un carácter no palabra, equivalente a /[^A-Za-z0-9_]/ |
ejemplo | descripción |
---|---|
/ruby?/ | Coincidir "rub" o "ruby". Donde y es opcional. |
/ruby*/ | Coincidir "rub" más 0 veces o varias de y. |
/ruby+/ | Coincidir "rub" más 1 un número o varios de y. |
/\d{3}/ | Coincidir exactamente 3 un número. |
/\d{3,}/ | Coincidir 3 un número o varios. |
/\d{3,5}/ | Coincidir 3 un,4 o 5 un número. |
Esto coincidirá con la repetición mínima.
ejemplo | descripción |
---|---|
/<.*>/ | Repetición voraz: coincidir "<ruby>perl>" |
/<.*?>/ | Repetición no voraz: coincidir "<ruby>perl>" con "<ruby>" |
ejemplo | descripción |
---|---|
/\D\d+/ | sin grupo: + repetir \d |
/(\D\d)+/ | grupo: + repetir \D\d |
/([Rr]uby(, )?)+/ | coincide con "Ruby", "Ruby, ruby, ruby", etc. |
esto volverá a coincidir con el grupo coincidido anteriormente.
ejemplo | descripción |
---|---|
/([Rr])uby&\1ails/ | coincide con ruby&rails o Ruby&Rails |
/(['"])(?:(?!\1).)*\1/ | cadenas de caracteres entre comillas simples o dobles.\1 coincide con el primer grupo de coincidencia, \2 coincide con el segundo grupo de coincidencia, etc. |
ejemplo | descripción |
---|---|
/ruby|rube/ | coincide con "ruby" o "rube" |
/rub(y|le)/ | coincide con "ruby" o "ruble" |
/ruby(!+|\?)/ | "ruby" seguido de uno o más ! o seguido de un ? |
esto requiere especificar la posición de coincidencia.
ejemplo | descripción |
---|---|
/^Ruby/ | coincide con la cadena que comienza con "Ruby" o la línea |
/Ruby$/ | coincide con la cadena que termina con "Ruby" o la línea |
/\ARuby/ | coincide con la cadena que comienza con "Ruby" |
/Ruby\Z/ | coincide con la cadena que termina con "Ruby" |
/\bRuby\b/ | coincide con el límite de palabra "Ruby" |
/\brub\B/ | \B es un límite no de palabra: coincide con "rube" y "ruby" pero no coincide con "rub" por sí solo |
/Ruby(?=!)/ | si después de "Ruby" sigue un exclamation mark, coincide con "Ruby" |
/Ruby(?!!)/ | si después de "Ruby" no sigue un exclamation mark, coincide con "Ruby" |
ejemplo | descripción |
---|---|
/R(?#comment)/ | coincide con "R". Todos los caracteres restantes son comentarios. |
/R(?i)uby/ | no distingue entre mayúsculas y minúsculas al coincidir con "uby". |
/R(?i:uby)/ | es igual que el anterior. |
/rub(?:y|le))/ | solo agrupar, sin \1 referencias inversas |
sub y gsub y sus variables de sustitución sub! y gsub! son métodos de cadena importantes al usar expresiones regulares.
todas estas métodos son usados para realizar búsquedas y reemplazos con patrones de expresiones regulares.sub y sub! reemplazan la primera aparición del patrón,gsub y gsub! reemplazan todas las apariciones del patrón.
sub y gsub devuelven una nueva cadena de caracteres, manteniendo la cadena original inmodificada, y sub! y gsub! modificarán las cadenas de caracteres que llaman.
#!/usr/bin/ruby # -*- coding: UTF-8 -*- phone = "138-3453-1111 # Esto es un número de teléfono" # Eliminar comentarios de Ruby phone = phone.sub!(/#.*$/, ") puts "Número de teléfono : #{phone}" # Eliminar todos los caracteres que no son números phone = phone.gsub!(/\D/, ") puts "Número de teléfono : #{phone}"
El resultado de ejecutar el ejemplo anterior es:
Número de teléfono : 138-3453-1111 Número de teléfono : 13834531111
#!/usr/bin/ruby # -*- coding: UTF-8 -*- text = "rails es rails, Ruby on Rails es un excelente framework de Ruby" # Cambiar todas las "rails" a "Rails" text.gsub!("rails", "Rails") # Cambiar todas las palabras "Rails" a mayúscula text.gsub!(/\brails\b/, "Rails") puts "#{text}"
El resultado de ejecutar el ejemplo anterior es:
Rails es un excelente framework de Ruby on Rails