6

¿Qué es esto?

Es una colección de preguntas y respuestas. También es un wiki de comunidad así que todos están invitados a colaborar, normalmente se requiere menos reputación que para muchas de las cosas del sitio.

¿Para qué o qué?

Es una etiqueta que sufre preguntas del tipo "dime que significa mi expresión regular".

¿Cuál es el alcance?

Esencialmente estos lenguajes:

Podría parecer muy extenso, pero estos lenguajes comparten características comunes.

Ruslan López
  • 10,060
  • 11
  • 35
  • 68

2 Answers2

5

Rangos

rango de elementos no secuenciales (p.ej. [,;])

Rango de caracteres negados (p.ej. [^a])

Cuantificadores

Secuencias de escape

\.

metacaracteres

clases de caracteres

Grupos

Lookarounds

Look ahead negativo ?!

Look ahead positivo ?=

Tipos de match

Greedy

Funciones específicas por lenguaje

Java

split()

Ruslan López
  • 10,060
  • 11
  • 35
  • 68
5

Por defecto las expresiones regulares son codiciosas (greedy). Esto significa que una expresión regular devuelve la cadena de texto más larga que coincida con ella.

Las expresiones regulares son también ansiosas (eager) por devolver un resultado.

Metacaracteres basicos

Los metacaracteres deben ser escapados cuando se utilicen como caracteres normales.

.   Cualquier carácter excepto salto de linea

*   Indica que el carácter precedente puede ocurrir 0 o más veces.

+   Indica que el carácter precedente puede ocurrir 1 o más veces.

?   Indica que el carácter precedente puede ocurrir 0 o 1 vez. Hace que el metacarácter anterior sea perezoso (lazy). 

[   Abre un set de caracteres

]   Cierra un set de caracteres

^   Niega un set de caracteres ( como en [^0-9] )

-   Define un set de caracteres ( de 0 a 9: [0-9] )

{   Comienza la repetición cuantificada del carácter precedente {min,max}

}   Acaba la repetición cuantificada del carácter precedente {min,max}

(   El comienzo de un grupo de caracteres.

)   El fin de un grupo de caracteres.

|   Alterna entre uno y otro carácter

\   El carácter de escape (Escape character)

Modificadores

i   Insensible a las mayúsculas y minúsculas Wstar (case insensitive)

g   Busqueda global (global match)

m   Busqueda en multiples líneas de texto. (Multiple lines)

s   Incluye saltos de línea. Sin él, las nuevas líneas son excluidas.

Clases de Carácteres (Ranges)

[abc]   Encuentra uno de los caracteres entre corchetes

[^abc]  Encuentra cualquier carácter que NO esté entre corchetes

[0-9]   Encuentra un dígito de 0 a 9

[^0-9]  Encuentra cualquier carácter que NO sea un dígito de 0 a 9

[A-Z]   Encuentra cualquier carácter de A mayuscula a Z mayuscula

[a-z]   Encuentra cualquier carácter de a minuscula a z minuscula

[A-z]   Encuentra cualquier carácter de A mayuscula a z minuscula

[adgk]  Encuentra uno de los caracteres entre corchetes

[^adgk] Encuentra cualquier carácter que NO esté entre corchetes

(a|b)   a o b

(...)   Se utilizan para agrupar partes de una expresión.

Caracteres específicos

\w      Encuentra un carácter alfanumérico, incluido el guión bajo ( _ ); equivale a: [a-zA-Z0-9_]

\W      Encuentra cualquier carácter NO alfanumérico; equivale a:   [^a-zA-Z0-9_]

\d      Encuentra un dígito *equivale a* [0-9]

\D      Encuentra cualquier carácter que NO es un dígito; equivale a: [^0-9]

\s      Encuentra un espacio en blanco; equivale a: [ \t\r\n]

\S      Encuentra cualquier carácter que NO es un espacio en blanco; equivale a: [^ \t\r\n]

\b      Encuentra una coincidencia al inicio o al final de una palabra.  

\B      Encuentra una coincidencia que NO está al inicio o al final de una palabra. 

\0      Encuentra un carácter NULL

\n      Salto de línea (new line)

\f      Salto de página (feed)

\r      Retorno de carro (return)

\t      Tabulador

\v      Tabulador vertical

\xxx    Representa un carácter especificado por un número octal xxx

\xdd    Representa un carácter especificado por un número hexadecimal dd

\uxxxx  Representa un carácter Unicode especificado por un número hexadecimal xxxx

Anclas

^   Comienzo de una línea

$   Final de una línea

\A  Comienzo de una cadena de texto (string). Nunca final de línea. (Soporte: Java, .NET, Perl,PHP, Python,Ruby)

\Z  Fin de cadena de texto (string). Nunca final de línea. (Soporte: Java, .NET, Perl,PHP, Python,Ruby)

\b  Principio o final de palabra (Word boundary)

\B  NO al principio o al final de una palabra

Declaraciones (Assertions)

?=  declaración positiva de búsqueda hacia delante (positive lookahead assertion)
    /(?=prematuro)pre/ encuentra pre de prematuro pero no pre de precavido
    /pre(?=maturo)/ encuentra pre de prematuro pero no pre de precavido

?!  declaración negativa de búsqueda hacia delante (negative lookahead assertion)
    /(?!prematuro)pre/ encuentra pre pero no de prematuro
    /pre(?!maturo)/ encuentra pre pero no de prematuro

?<= declaración positiva de búsqueda hacia atrás positive lookbehind assertion)
    Soporte:
    Si: .NET, Java, Perl, PHP, Python, Ruby 1.9
    No:.JavaScript, Ruby 1.8, Unix
    /(?<=balon)mano/ encuentra -mano de balonmano pero no de antemano

?<! declaración negativa de búsqueda hacia atrás (negative lookbehind assertion)
    Soporte:
    Si: .NET, Java, Perl, PHP, Python, Ruby 1.9
    No:.JavaScript, Ruby 1.8, Unix
    /(?<!balon)mano/ encuentra -mano pero no de balonmano

Retroreferencias (backreference)

Para designar una retroreferencia (backreference), a veces utilizamos la barra inversa ( \ ), otras veces el dólar ( $ ), dependiendo del lenguaje que se utilice.

$n  \n  n-ésimo grupo no pasivo (no-passive group)

$2  \2  "xyz" en /^ (abc)(xyz) $/

$2  \2  "xyz" en /^ (abc(xyz)) $/

?       cambia el significado del grupo

:       el significado del grupo es: pasivo

?:      especifica un grupo pasivo (passive group / non-capturing group)

$1  \1  "xyz" en /^ (?:abc)(xyz) $/ (porque el primer grupo es pasivo)

Comodines UNICODE

Soporte:

Si: Java, .NET, Perl, PHP, Ruby

No: JavaScript, Python, Unix

\X      Carácter comodín Unicode. Encuentra cualquier carácter incluso salto de linea.

\p{xx}  Un carácter con la propiedad xx

\P{xx}  Un carácter sin la propiedad xx

M       \p{M} Marca (acentos, tilde...etc)

L       \p{L} Letra (incluye las letras accentuadas, la ñ...etc)

N       \p{N} Numero

S       \p{S} Símbolo

C       \p{C} Otros

POSIX (Portable Operating System Interface)

Manera correcta de utilizarlos: [[:alpha:]] or [^[:alpha:]].

Soporte:

SI: Perl, PHP, Ruby, Unix

NO: Java, JavaScript, .NET, Python

[:alpha:]   Caracteres alfabéticos; equivale a:[a-zA-Z]

[:digit:]   Dígitos; equivale a:[0-9]

[:alnum:]   Caracteres alfanuméricos; equivale a:[a-zA-Z0-9]

[:lower:]   Letras minúsculas; equivale a:[a-z]

[:upper:]   Letras mayúsculas; equivale a:[A-Z]

[:word:]    Letras, números y el guion bajo; equivale a:[A-Za-z0-9_]

[:punct:]   Punctuacion y símbolos; equivale a:[!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~]

[:space:]   Espacios en blanco, incluido <br />; equivale a:[ \t\r\n\v\f]

[:blank:]   Espacio y tabulador; equivale a:[ \t]

[:print:]   Caracteres visibles y espacios (i.e: excepto los caracteres de control); equivale a:[\x20-\x7E]

[:graph:]   Caracteres visibles (i.e: excepto espacios, caracteres de control, etc.); equivale a:[\x21-\x7E]

[:xdigit:]  Dígitos hexadecimales; equivale a:[A-Fa-f0-9]

[:ascii:]   Caracteres ASCII; equivale a:[\x00-\x7F]

[:cntrl:]   Caracteres de control; equivale a:[\x00-\x1F\x7F]

Todo esto está copiado de mi página web. Espero que sea útil.

enxaneta
  • 3,708
  • 2
  • 9
  • 20