Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Expresiones regulares

¿Qué es una expresión regular?

Una expresión regular es una secuencia de caracteres que define un patrón determinado. Normalmente se usa una expresión regular para buscar texto para un grupo de palabras que coincida con el patrón, por ejemplo, al analizar la entrada del programa o al procesar un bloque de texto.

El vector de caracteres es un ejemplo de una expresión regular.'Joh?n\w*' Define un patrón que comienza con las letras, es seguido opcionalmente por la letra (indicada por), luego es seguida por la letra, y termina con cualquier número de, es decir, caracteres que son alfabéticos, numéricos o de subrayado (indicados por).Joh'h?'ncaracteres de palabra'\w*' Este patrón coincide con cualquiera de los siguientes:

Jon, John, Jonathan, Johnny 

Las expresiones regulares proporcionan una forma única de buscar un volumen de texto para un subconjunto determinado de caracteres dentro de ese texto. En lugar de buscar una coincidencia de caracteres exacta como lo harías con una función como, las expresiones regulares te dan la capacidad de buscar un particular de caracteres.strfindpattern

Por ejemplo, varias formas de expresar una tasa de velocidad métrica son:

km/h km/hr km/hour kilometers/hour kilometers per hour 

Puede ubicar cualquiera de los términos anteriores en su texto emitiendo cinco comandos de búsqueda independientes:

strfind(text, 'km/h'); strfind(text, 'km/hour'); % etc. 

Sin embargo, para ser más eficiente, puede crear una sola frase que se aplique a todos estos términos de búsqueda:

Traduce esta frase en una expresión regular (que se explicará más adelante en esta sección) y tienes:

pattern = 'k(ilo)?m(eters)?(/|\sper\s)h(r|our)?'; 

Ahora Localice uno o más de los términos usando un solo comando:

text = ['The high-speed train traveled at 250 ', ...    'kilometers per hour alongside the automobile ', ...    'travelling at 120 km/h.']; regexp(text, pattern, 'match') 
ans =    1×2 cell array      {'kilometers per hour'}    {'km/h'} 

Hay cuatro funciones que admiten la búsqueda y sustitución de caracteres mediante expresiones regulares.MATLAB® Los tres primeros son similares en los valores de entrada que aceptan y los valores de salida que devuelven. Para obtener más información, haga clic en los vínculos a las páginas de referencia de función.

FunciónDescripción
regexp

Coincidir con la expresión regular.

regexpi

Coincide con la expresión regular, ignorando el caso.

regexprep

Reemplace parte del texto mediante la expresión regular.

regexptranslate

Traducir texto en expresión regular.

Al llamar a cualquiera de las tres primeras funciones, pase el texto que se analizará y la expresión regular en los dos primeros argumentos de entrada. Al llamar, pase una entrada adicional que sea una expresión que especifique un patrón para la sustitución.regexprep

Pasos para crear expresiones

Hay tres pasos involucrados en el uso de expresiones regulares para buscar texto para un término en particular:

  1. Identifique patrones únicos en la cadena

    Esto implica dividir el texto que desea buscar en grupos de tipos de caracteres como. Estos tipos de caracteres podrían ser una serie de letras minúsculas, un signo de dólar seguido de tres números y luego un punto decimal, etc.

  2. Exprese cada patrón como una expresión regular

    Utilice los operadores y descritos en esta documentación para expresar cada segmento del patrón de búsqueda como una expresión regular.Metacaracteres A continuación, combine estos segmentos de expresión en la expresión única que se usará en la búsqueda.

  3. Llame a la función de búsqueda adecuada

    Pase el texto que desea analizar a una de las funciones de búsqueda, como o, o a la función de reemplazo de texto,.regexpregexpiregexprep

El ejemplo que se muestra en esta sección busca un registro que contenga información de contacto perteneciente a un grupo de cinco amigos. Esta información incluye el nombre de cada persona, número de teléfono, lugar de residencia y dirección de correo electrónico. El objetivo es extraer información específica del texto..

contacts = { ... 'Harry  287-625-7315  Columbus, OH  hparker@hmail.com'; ... 'Janice  529-882-1759  Fresno, CA  jan_stephens@horizon.net'; ... 'Mike  793-136-0975  Richmond, VA  sue_and_mike@hmail.net'; ... 'Nadine  648-427-9947  Tampa, FL  nadine_berry@horizon.net'; ... 'Jason  697-336-7728  Montrose, CO  jason_blake@mymail.com'}; 

La primera parte del ejemplo compila una expresión regular que representa el formato de una dirección de correo electrónico estándar. Con esa expresión, el ejemplo busca la información de la dirección de correo electrónico de uno de los grupos de amigos. La información de contacto de Janice está en la fila 2 de la matriz de celdas:contacts

contacts{2} 
ans =      'Janice  529-882-1759  Fresno, CA  jan_stephens@horizon.net' 

Paso 1 — identificar patrones únicos en el texto

Una dirección de correo electrónico típica se compone de componentes estándar: el nombre de la cuenta del usuario, seguido de un signo @, el nombre del proveedor de servicios de Internet del usuario (ISP), un punto (período) y el dominio al que pertenece el ISP. La siguiente tabla enumera estos componentes en la columna izquierda y generaliza el formato de cada componente en la columna derecha.

Los patrones únicos de una dirección de correo electrónicoDescripción general de cada patrón
Comience con el nombre de la cuenta...
jan_stephens
Una o más letras minúsculas y guiones bajos
Añadir ' '...@
jan_stephens@
Firmar@
Añadir el ISP...
jan_stephens@horizon
Una o más letras minúsculas, sin guiones bajos
Añadir un punto (período)...
jan_stephens@horizon.
Carácter de punto (período)
Finalice con el dominio
jan_stephens@horizon.net
Ocomnet

Paso 2 — expresar cada patrón como una expresión regular

En este paso, traducirá los formatos generales derivados en el paso 1 en segmentos de una expresión regular. A continuación, agregue estos segmentos juntos para formar la expresión completa.

La siguiente tabla muestra las descripciones de formato generalizado de cada patrón de caracteres en la columna de la izquierda. (Esto se llevó adelante de la columna derecha de la tabla en el paso 1.) La segunda columna muestra los operadores o metacaracteres que representan el patrón de caracteres.

Description of each segmentPatrón
Una o más letras minúsculas y guiones bajos[a-z_]+
Firmar@@
Una o más letras minúsculas, sin guiones bajos[a-z]+
Carácter de punto (período)\.
Ocomnet(com|net)

Ensamblar estos patrones en un vector de caracteres le da la expresión completa:

email = '[a-z_]+@[a-z]+\.(com|net)'; 

Paso 3 — llame a la función de búsqueda apropiada

En este paso, usará la expresión regular derivada en el paso 2 para que coincida con una dirección de correo electrónico para uno de los amigos del grupo. Utilice la función para realizar la búsqueda.regexp

Aquí está la lista de información de contacto mostrada anteriormente en esta sección. El registro de cada persona ocupa una fila de la matriz de celdas:contacts

contacts = { ... 'Harry  287-625-7315  Columbus, OH  hparker@hmail.com'; ... 'Janice  529-882-1759  Fresno, CA  jan_stephens@horizon.net'; ... 'Mike  793-136-0975  Richmond, VA  sue_and_mike@hmail.net'; ... 'Nadine  648-427-9947  Tampa, FL  nadine_berry@horizon.net'; ... 'Jason  697-336-7728  Montrose, CO  jason_blake@mymail.com'}; 

Esta es la expresión regular que representa una dirección de correo electrónico, como se deriva en el paso 2:

email = '[a-z_]+@[a-z]+\.(com|net)'; 

Llame a la función, pasando la fila 2 de la matriz de celdas y la expresión regular.regexpcontactsemail Esto devuelve la dirección de correo electrónico de Janice.

regexp(contacts{2}, email, 'match') 
ans =    1×1 cell array      {'jan_stephens@horizon.net'} 

analiza un vector de caracteres de izquierda a derecha, "consumiendo" el vector tal como va.MATLAB Si se encuentran caracteres coincidentes, registra la ubicación y reanuda el análisis del vector de caracteres, comenzando justo después del final de la coincidencia más reciente.regexp

Haga la misma llamada, pero esta vez para la quinta persona en la lista:

regexp(contacts{5}, email, 'match') 
ans =    1×1 cell array      {'jason_blake@mymail.com'} 

También puede buscar la dirección de correo electrónico de todos los usuarios de la lista utilizando la matriz de celdas completa para el argumento de entrada:

regexp(contacts, email, 'match'); 

Operadores y personajes

Las expresiones regulares pueden contener caracteres, metacaracteres, operadores, tokens y marcas que especifiquen patrones que coincidan, como se describe en estas secciones:

Metacaracteres

Los metacaracteres representan letras, rangos de letras, dígitos y caracteres de espacio. Utilítelos para construir un patrón generalizado de caracteres.

Metacarácter

Descripción

Ejemplo

.

Cualquier carácter individual, incluido el espacio en blanco

coincide con secuencias de cinco caracteres consecutivos que terminan con.'..ain''ain'

[c1c2c3]

Cualquier carácter contenido dentro de los corchetes. Los siguientes caracteres se tratan literalmente: y cuando no se utiliza para indicar un rango.$ | . * + ?-

fósforos o.'[rp.]ain''rain''pain''.ain'

[^c1c2c3]

Cualquier carácter no contenido dentro de los corchetes. Los siguientes caracteres se tratan literalmente: y cuando no se utiliza para indicar un rango.$ | . * + ?-

coincide con todas las secuencias de cuatro letras que terminan en, excepto y y.'[^*rp]ain''ain''rain''pain''*ain' Por ejemplo, coincide, o.'gain''lain''vain'

[c1-c2]

Cualquier carácter en el rango dec1 a través dec2

coincide con un solo carácter en el rango de through.'[A-G]'AG

\w

Cualquier carácter alfabético, numérico o de subrayado. Para los juegos de caracteres ingleses, equivale a\w[a-zA-Z_0-9]

identifica una palabra.'\w*'

\W

Cualquier carácter que no sea alfabético, numérico o de subrayado. Para los juegos de caracteres ingleses, equivale a\W[^a-zA-Z_0-9]

identifica un término que no es una palabra.'\W*'

\s

Cualquier carácter de espacio en blanco; equivalentes a[ \f\n\r\t\v]

coincide con palabras que terminan con la letra, seguida de un carácter de espacio en blanco.'\w*n\s'n

\S

Cualquier carácter que no tenga espacio en blanco; equivalentes a[^ \f\n\r\t\v]

coincide con un dígito numérico seguido de cualquier carácter que no es de espacio en blanco.'\d\S'

\d

Cualquier dígito numérico; equivalentes a[0-9]

coincide con cualquier número de dígitos consecutivos.'\d*'

\D

Cualquier carácter no dígito; equivalentes a[^0-9]

coincide con palabras que no terminan con un dígito numérico.'\w*\D\>'

O\oN\o{N}

Carácter de valor octalN

coincide con el carácter de espacio, definido por octal.'\o{40}'40

O\xN\x{N}

El carácter de valor hexadecimalN

coincide con el carácter de coma, definido por hex.'\x2C'2C

Representación de caracteres

Operador

Descripción

\a

Alarma (pitido)

\b

Retroceso

\f

El feed de forma

\n

Nueva línea

\r

Retorno de carro

\t

Pestaña horizontal

\v

Pestaña vertical

\char

Cualquier carácter con significado especial en las expresiones regulares que desea que coincida literalmente (por ejemplo, utilizar para que coincida con una sola barra diagonal inversa)\\

Cuantificadores

Los cuantificadores especifican el número de veces que debe producirse un patrón en el texto coincidente.

Cuantificador

Coincide con la expresión cuando se produce...

Ejemplo

expr*

0 o más veces consecutivamente.

coincide con una palabra de cualquier longitud.'\w*'

expr?

0 veces o 1 vez.

coincide con palabras que, opcionalmente, terminan con la extensión.'\w*(\.m)?'.m

expr+

1 o más veces consecutivamente.

coincide con una etiqueta HTML cuando el nombre de archivo contiene uno o más caracteres.'<img src="\w+\.gif">'<img>

expr{m,n}

Al menos veces, pero no más de un tiempo consecutivamente.mn

equivale a.{0,1}?

coincide entre cuatro y ocho caracteres que no son de espacio en blanco.'\S{4,8}'

expr{m,}

Al menos veces consecutivamente.m

y son equivalentes a y, respectivamente.{0,}{1,}*+

coincide con una etiqueta HTML cuando el nombre de archivo contiene uno o más caracteres.'<a href="\w{1,}\.html">'<a>

expr{n}

Exactamente a veces consecutivamente.n

Equivalente a.{n,n}

coincide con cuatro dígitos consecutivos.'\d{4}'

Los cuantificadores pueden aparecer en tres modos, descritos en la tabla siguiente. representa cualquiera de los cuantificadores de la tabla anterior.q

Modo

Descripción

Ejemplo

exprq

Expresión expansiva: combina tantos caracteres como sea posible.

Dado el texto, la expresión coincide con todos los caracteres entre y:'<tr><td><p>text</p></td>''</?t.*>'<tr/td>

'<tr><td><p>text</p></td>'

exprq?

Expresión diferida: coinciden con los pocos caracteres que sean necesarios.

Dado el texto, la expresión finaliza cada coincidencia en la primera aparición del corchete angular de cierre ():'<tr><td><p>text</p></td>''</?t.*?>'>

'<tr>'   '<td>'   '</td>'

+exprq

Expresión posesiva: coinciden tanto como sea posible, pero no se puede volver a examinar ninguna parte del texto.

Dado el texto, la expresión no devuelve ninguna coincidencia, porque el corchete angular de cierre se captura utilizando y no se vuelve a analizar.'<tr><td><p>text</p></td>''</?t.*+>'.*

Agrupar operadores

Los operadores de agrupación le permiten capturar tokens, aplicar un operador a varios elementos o deshabilitar retroceso en un grupo específico.

Operador de agrupación

Descripción

Ejemplo

(expr)

Agrupe elementos de la expresión y Capture tokens.

captura un token que contiene el apellido de cualquier persona con el primer nombre o.'Joh?n\s(\w*)'JohnJon

(?:expr)

Agrupar, pero no capture tokens.

coincide con dos patrones consecutivos de una vocal seguida de una nonvowel, como.'(?:[aeiou][^aeiou]){2}''anon'

Sin agrupación, coincide con una vocal seguida de dos no vocales.'[aeiou][^aeiou]{2}'

(?>expr)

Agrupe atomicamente. No retrocree dentro del grupo para completar la coincidencia y no capture tokens.

no coincide, aunque sí lo hace.'A(?>.*)Z''AtoZ''A(?:.*)Z' El uso del grupo atómico se captura utilizando y no se vuelve a analizar.Z.*

(expr1|expr2)

Coincidencia de expresión o expresión.expr1expr2

Si hay una coincidencia con, entonces se ignora.expr1expr2

Puede incluir o después del paréntesis de apertura para suprimir tokens o agrupar atomicamente.?:?>

coincide con palabras que empiezan por o.'(let|tel)\w+'lettel

Anclajes

Los anclajes de la expresión coinciden con el principio o el final de un vector de caracteres o una palabra.

Ancla

Coincide con el...

Ejemplo

^expr

Inicio del texto de entrada.

coincide con una palabra que comienza al principio del texto.'^M\w*'M

expr$

Fin del texto de entrada.

coincide con palabras que terminan al final del texto.'\w*m$'m

\<expr

Comienzo de una palabra.

coincida con cualquier palabra a partir de.'\<n\w*'n

expr\>

Fin de una palabra.

coincida con cualquier palabra que termine con.'\w*e\>'e

Las aserciones de Lookaround

Las aserciones de Lookaround buscan patrones que preceden o sigan inmediatamente a la coincidencia prevista, pero que no forman parte de la coincidencia.

El puntero permanece en la ubicación actual y los caracteres que corresponden a la expresión no se capturan ni se descartan.test Por lo tanto, las aserciones de búsqueda anticipada pueden coincidir con grupos de caracteres superpuestos.

Aserción de Lookaround

Descripción

Ejemplo

expr(?=test)

Mira hacia adelante para los personajes que coinciden.test

coincide con los términos seguidos, por ejemplo, y en el texto de entrada'\w*(?=ing)'ing'Fly''fall''Flying, not falling.'

expr(?!test)

Mira hacia adelante para los personajes que no coinciden.test

coincide con las instancias de la letra que no están seguidas.'i(?!ng)'ing

(?<=test)expr

Mira detrás de los personajes que coinciden.test

coincide con los términos que siguen, como, y en el texto de entrada'(?<=re)\w*''re''new''use''cycle''renew, reuse, recycle'

(?<!test)expr

Mira detrás de los personajes que no coinciden.test

coincide con números de un solo dígito (dígitos que no preceden o siguen otros dígitos).'(?<!\d)(\d)(?!\d)'

Si especifica una aserción de búsqueda anticipada de una expresión, la operación equivale a una lógica.beforeAND

Operación

Descripción

Ejemplo

(?=test)expr

Coinciden ambos y.testexpr

coincide con las consonantes.'(?=[a-z])[^aeiou]'

(?!test)expr

Coinciden y no coinciden.exprtest

coincide con las consonantes.'(?![aeiou])[a-z]'

Para obtener más información, consulte.Aserciones de búsqueda anticipada en expresiones regulares

Operadores lógicos y condicionales

Los operadores lógicos y condicionales le permiten probar el estado de una condición determinada y, a continuación, usar el resultado para determinar qué patrón, si existe, debe coincidir con el siguiente. Estos operadores admiten lógicas o condiciones.ORifif/else (Para condiciones, ver.)ANDLas aserciones de Lookaround

Las condiciones pueden ser, o de la forma.Fichasaserciones de buscarExpresiones dinámicas(?@cmd) Las expresiones dinámicas deben devolver un valor lógico o numérico.

Operador condicional

Descripción

Ejemplo

expr1|expr2

Coincidencia de expresión o expresión.expr1expr2

Si hay una coincidencia con, entonces se ignora.expr1expr2

coincide con palabras que empiezan por o.'(let|tel)\w+'lettel

(?(cond)expr)

Si la condición es, entonces haga juego.condtrueexpr

coincide con un nombre de unidad, por ejemplo, cuando se ejecuta en un sistema.'(?(?@ispc)[A-Z]:\\)'C:\Windows®

(?(cond)expr1|expr2)

Si la condición es, entonces haga juego.condtrueexpr1 De lo contrario, coinciden.expr2

coincide con el texto que incluye cuando el texto comienza con, o que incluye cuando el texto comienza con.'Mr(s?)\..*?(?(1)her|his) \w*'herMrshisMr

Los operadores de tokens

Los tokens son partes del texto coincidente que se definen al encerrar parte de la expresión regular entre paréntesis. Puede hacer referencia a un token por su secuencia en el texto (un token ordinal) o asignar nombres a tokens para facilitar el mantenimiento del código y la salida legible.

Operador de token ordinal

Descripción

Ejemplo

(expr)

Capture en un token los caracteres que coincidan con la expresión adjunta.

captura un token que contiene el apellido de cualquier persona con el primer nombre o.'Joh?n\s(\w*)'JohnJon

\N

Coincide con el token TH.N

captura tokens para etiquetas HTML, como el texto.'<(\w+).*>.*</\1>''title''<title>Some text</title>'

(?(N)expr1|expr2)

Si se encuentra el token TH, a continuación, haga coincidir.Nexpr1 De lo contrario, coinciden.expr2

coincide con el texto que incluye cuando el texto comienza con, o que incluye cuando el texto comienza con.'Mr(s?)\..*?(?(1)her|his) \w*'herMrshisMr

Operador de token con nombre

Descripción

Ejemplo

(?<name>expr)

Capture en un token con nombre los caracteres que coinciden con la expresión adjunta.

crea tokens con nombre para el mes, el día y el año en una fecha de entrada del formulario.'(?<month>\d+)-(?<day>\d+)-(?<yr>\d+)'mm-dd-yy

\k<name>

Haga coincidir el token al que se hace referencia.name

captura tokens para etiquetas HTML, como el texto.'<(?<tag>\w+).*>.*</\k<tag>>''title''<title>Some text</title>'

(?(name)expr1|expr2)

Si se encuentra el token con nombre, haga coincidir.expr1 De lo contrario, coinciden.expr2

coincide con el texto que incluye cuando el texto comienza con, o que incluye cuando el texto comienza con.'Mr(?<sex>s?)\..*?(?(sex)her|his) \w*'herMrshisMr

Nota

Si una expresión tiene paréntesis anidados, captura los tokens que corresponden al conjunto más externo de paréntesis.MATLAB Por ejemplo, dado el patrón de búsqueda, crea un token para, pero no para o.'(and(y|rew))'MATLAB'andrew''y''rew'

Para obtener más información, consulte.Los tokens en expresiones regulares

Expresiones dinámicas

Las expresiones dinámicas permiten ejecutar un comando o una expresión regular para determinar el texto que se debe hacer coincidir.MATLAB

Los paréntesis que encierran expresiones dinámicas crean un grupo de captura.not

Operador

Descripción

Ejemplo

(??expr)

Analice e incluya el término resultante en la expresión de coincidencia.expr

Cuando se analiza, debe corresponder a una expresión regular completa y válida.expr Las expresiones dinámicas que utilizan el carácter de escape de barra diagonal inversa () requieren dos barras diagonales inversas: una para el análisis inicial y otra para la coincidencia completa.\expr

determina el número de caracteres que se emparejan al leer un dígito al principio de la partida.'^(\d+)((??\\w{$1}))' La expresión dinámica se adjunta en un segundo conjunto de paréntesis para que la coincidencia resultante se Capture en un token. Por ejemplo, la coincidencia de capturas de tokens para y.'5XXXXX''5''XXXXX'

(??@cmd)

Ejecute el comando representado por e incluya la salida devuelta por el comando en la expresión de coincidencia.MATLABcmd

encuentra palíndromos que tienen al menos cuatro caracteres de longitud, como.'(.{2,}).?(??@fliplr($1))''abba'

(?@cmd)

Ejecute el comando representado por, pero descarte cualquier salida que devuelva el comando.MATLABcmd (Útil para diagnosticar expresiones regulares.)

coincide con palabras que incluyen Letras dobles (como) y muestra resultados intermedios.'\w*?(\w)(?@disp($1))\1\w*'pp

Dentro de las expresiones dinámicas, utilice los siguientes operadores para definir términos de sustitución.

Operador de reemplazo

Descripción

O$&$0

Parte del texto de entrada que es actualmente una coincidencia

$`

Parte del texto de entrada que precede a la coincidencia actual

$'

Parte del texto de entrada que sigue a la coincidencia actual (se usa para representar)$''$'

$N

TH tokenN

$<name>

Token con nombre

${cmd}

Salida devuelta cuando se ejecuta el comando,MATLABcmd

Para obtener más información, consulte.Expresiones regulares dinámicas

Comentarios

El operador le permite insertar comentarios en el código para que sea más fácil de mantener.comment El texto del comentario se ignora cuando se compara con el texto de entrada.MATLAB

Caracteres

Descripción

Ejemplo

(?#comment)

Inserte un Comentario en la expresión regular. El texto del comentario se omite al hacer coincidir la entrada.

incluye un comentario y coincide con palabras que empiezan por un número.'(?# Initial digit)\<\d\w+'

Las banderas de búsqueda

Los indicadores de búsqueda modifican el comportamiento de las expresiones coincidentes.

Bandera

Descripción

(?-i)

Coincidir mayúsculas y minúsculas (por defecto para y).regexpregexprep

(?i)

No coincidir mayúsculas y minúsculas (por defecto para).regexpi

(?s)

Haga coincidir punto () en el patrón con cualquier carácter (predeterminado)..

(?-s)

Haga coincidir el punto en el patrón con cualquier carácter que no sea un carácter de nueva línea.

(?-m)

Haga coincidir los metacaracteres al principio y al final del texto (predeterminado).^$

(?m)

Haga coincidir los metacaracteres al principio y al final de una línea.^$

(?-x)

Incluya caracteres de espacio y comentarios al hacer coincidir (predeterminado).

(?x)

Ignorar caracteres de espacio y comentarios al hacer coincidir. Utilice y para hacer coincidir el espacio y los caracteres.'\ ''\#'#

La expresión que modifica la marca puede aparecer después de los paréntesis, como

(?i)\w* 

o dentro de los paréntesis y separados de la bandera con dos puntos (), como:

(?i:\w*) 

Esta última sintaxis permite cambiar el comportamiento de una parte de una expresión mayor.

Consulte también

| | |

Temas relacionados