Expresiones regulares, ahora en modo fácil!

Lecherito

Please, comentad sobre el tutorial, necesito críticas por que no sé si lo estoy haciendo bien o mal, ya que es mi primer tutorial. Y se agradece.

Buenas, después de un tiempo leyendo un libro sobre expresiones regulares me he dado cuenta de apenas hay material, o gente "aficionada" a ellas así que decidido ir escribiendo un tutorial, con pequeños ejemplos para que se pueda entender de una manera fácil y sencilla.

No hablaré (por lo pronto) como hacer cosas super complejas (ya que incluso yo tampoco sé todavía, o no tengo soltura con ello) ni como optimizarlas pero entenderéis lo facilito que es hacer las expresiones regulares de "andar por casa" que resolverán de una manera rápida y sencilla vuestras pequeñas tareas.

Índice

1- #2 ¿Qué son las expresiones regulares y para que sirven? Link
2- #12 Como las construyo? Link
3- #17 Modificadores Link
4- #24 Caracteres especiales en las expresiones regulares, cuantificadores y anchors.Link
4.1- #37 Listado de abreviaturas en las expresiones regulares y word boundaries Link
4.2- #28 Como funcionan los cuantificadores y tipos. Link
5- #35 Grupos Link
5.1- #46 Lookarounds Link

Para acceder a cada capítulo puedes usar el Link, o clickar en el desplegable de #2 (por ejemplo).
(Con ejemplos después de cada capítulo)

Ejercicios

Ya que los ejercicios son una parte fundamental para coger práctica con las expresiones regulares, los pondré aquí también (además de en #31 ).

Bueeeno, ahora que hemos visto lo básico de las expresiones regulares, va siendo hora de practicarlas con algunos ejercicios simples! Para hacer estos ejercicios, se usará la página web www.regex101.com y con la opción de permalink me mandáis un PM con la respuesta, los ejercicios se hacen desde el principio, no me vale que me hagáis el ejercicio 20 por que los demás son muy fáciles, tendré un post de hasta qué ejercicio ha hecho cada uno.

Para el PM: El enunciado de cada ejercicio será la seccion (Caracteres especiales...etc), y el número de ejercicio.

  • 1- Has de encontrar todas las A del siguiente texto: ahora voy a nAdar con MARIA.

  • 2- Cambia todas las vocales de esta frase por la vocal e: Mi moto alpina de repente.

  • 3- Haz que la siguiente expresión regular sea case insensitive solo y exclusivamente en la palabra hola: /hola amigo/

  • 1- Construye una expresión regular que encuentre el siguiente texto: ·"$("!$·/\\

  • 2- Construye una expresion regular que encuentre todos los números de un texto, como por ejemplo: 83 psf2 463p j6 832p42863

  • 3- Queremos encontrar todas las letras mayúsculas excepto las vocales del siguiente texto: A38bBv801nWZZ

Recursos

LA BIBLIA DE LAS EXPRESIONES REGULARES
www.regex101.com - Para testear expresiones regulares.
www.regexper.com - Visualizar expresiones regulares, ejemplo:

http://www.regexplanet.com/ - Testear expresiones regulares en distintos lenguajes de programación!
http://www.regular-expressions.info - Si te va el inglés es algo parecido a lo que estoy haciendo!
http://www.debuggex.comUn debugger de expresiones regulares, no lo he testado mucho pero tiene MUY MUY buena pinta.
PD: Soy un negado para dejar el hilo bonito, algún voluntario? xDD

26
Lecherito

1- ¿Qué son las expresiones regulares y para que sirven?

Pongámonos en la piel de un trabajador, el cual su jefe le ha pedido que reemplace el nombre de una variableXXX (pero hay 3 letras al final de la variable que pueden cambiar!) en todos los .java (o .py, archivos de texto) del proyecto Pepito. La manera habitual de hacerlo sería ir archivo por archivo buscando esa variable y cambiando el nombre pero..., ¿qué pasa si podemos hacer ese trabajo automáticamente y con unas pocas líneas de código? Woho!, esa es otra manera de hacer las cosas y como a los programadores nos gusta, automatizar cosas con código!.

La segunda manera de hacerla es esa, escribir un programita que recorra todos los archivos de texto de una (o varias) carpetas y que haga el trabajo por ti. Pronto veremos como esto es posible usando expresiones regulares.

A lo que vamos, las expresiones regulares se podría describir como la herramienta flexible, potente y eficiente para procesar, cambiar, sustituir, y casi cualquier cosa con texto. Son como un mini lenguaje de programación que se centra en crear/programar patrones que detectan concordancias con un texto.

Existen dos tipos de caracteres en las expresiones regulares, los caracteres que tienen un significado especial y los que no. Tan simple y llano como eso, los caracteres que tienen un significado especial, se llaman metacaracteres y lo que implica es que el motor que procese la expresión regular (a partir de ahora las llamaré simplemente regex) no los tomará como ese carácter, literalmente si no que significa otra cosa, veamos este ejemplo que todo el mundo conoce:

Cuando en el buscador de windows/cualquierotro quieres buscar un archivo que termina con la extensión ".jpg" cómo lo buscas? Simplemente poniendo "*.jpg" pero... cómo es que el buscador no busca ese nombre exactamente?, exacto! el carácter * tiene un significado especial en este contexto y significa que puede haber cualquier carácter (y cualquier cantidad) antes de la extensión .jpg.

Los caracteres que no tienen ningún significado especial, el motor simplemente tratará de encontrar ese carácter.

En este capítulo hemos aprendido qué son las expresiones regulares, para qué sirven y de que se compone una expresión regular. Capítulo corto e introductorio al complejo y rebuscado mundo de las regex.

MrTurbo

Manito, me suscribo :-P

Soy un puto manco con las expresiones regulares, aprender a hacerlas bien me sería muy útil.

zoeshadow

La verdad es que no he encontrado ningún recurso BUENO donde aprender regexp ( tampoco las he necesitado demasiado ), pero no estaría de mas aprovechar el hilo para compartir algunos enlaces y recomendar algun libro.

1 respuesta
eisenfaust

Vas a llegar a expresiones regulares recursivas y demas regexp-fu?

1 1 respuesta
Vegon

El otro día me pasaron un visualizador de regex bastante molón, por si os sirve:

http://www.regexper.com/

3 1 respuesta
eisenfaust

Eye candy aparte, si usais win no vais a encontrar nada mejor que esto http://www.weitz.de/regex-coach/

Y de paso echad unos leuros xD

1 respuesta
Lecherito

#4 De libro te puedo recomendar el Mastering regular expressions de Jeffrey Friedl (O'Reilly), es el que me compré y es como la biblia de las expresiones regulares xDD

#5 Si, bueno, puse un planning general, casi nunca he escrito tutoriales así que bueno, agradecería críticas! De todas maneras que rara es la recursión de esa regex, siempre lo hice del tipo (?1) para colocar directamente el grupo 1 y así dar pie a la recursión.

#6 Pondré esa página en #1 junto con regex101.com (para mi la mejor página para testear expresiones regulares)

#7 Yo apostaría por RegexBuddy o RegexMagic (están por el torrente si estás en la crisis de enero)

HeXaN

Me interesa, a favoritos que va.

Lecherito

Acabo de "redactar" si es que se le puede llamar así, el primer capítulo (está en #2) y me gustaría leer opiniones.

1 1 respuesta
Caotico

#10 Está muy bien, sigue así.

Lecherito

2- ¿Cómo las construyo?

Huh! Capítulo cortito donde los haya, explicaré cuales son las partes de una expresión regular, hay diferencias en cada lenguaje de programación (2 principalmente), así que intentaré poner ejemplos generales y al final del capítulo algún ejemplo en algunos lenguajes de programación principales.

Una expresión regular principalmente tiene dos partes:

  • 1- La parte que contiene la expresión regular en si.

  • 2- Los modificadores de esa expresión (como case insensitive, global, etc...)

Esas dos partes se separan con / , así que en general la expresión regular quedaría:

/expresión/modificadores

En la parte 3 de este tutorial hablaré sobre cuantos modificadores existen y para qué sirve cada uno.

En algunos lenguajes de programación, se construyen de otra manera algo distinta, algo del tipo:

expresion("expresionregular", Modificador1 | Modificador2)

Estos son los dos tipos más comunes de construir una expresión regular.

Ejemplos reales de expresiones regulares

En esta sección pondré ejemplos reales para usar las expresiones regulares, así podréis ver como se trabaja con ellas, lo fácil que es usarlas (y a veces lo complicado que es construirlas xD).

No os preocupéis si todavía no entendéis lo que significa la expresión regular, usaré siempre la expresión regular "mongol[oa]" que significa, encuentra la palabra mongol y después de esa palabra, ha de haber una o, o una a. Por lo tanto encontraría coincidencia en "mongolo" y "mongola".

Pattern pattern = Pattern.compile("mongol[oa]", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(args);
if (matcher.matches()) {
    System.out.println("Ue!! Funciona!");
}

<?php
preg_match('/^def/', "abcdef", $matches);
print_r($matches);
?>

Realmente no conozco otro lenguaje aparte de java para usar expresiones regulares, si descubrís algún error, PM.

eXtreM3

Vaya thread más bueno, a ver si se pasan por aquí los ilustres y nos iluminan!

1 respuesta
Lecherito

#13 Mañana sigo con ello! Seguramente me ponga en clase, es un aburrimiento estar allí, quiero críticas!

Beavis

Yo para testearlas uso la versión air de RegExr; puedes guardarlas, viene algo de ayuda con flags y operadores y también tiene un tab con snippets de la comunidad que va bastante bien si necesitas ejemplos prácticos
Si vas a entrar en profundidad con las regexp yo me centraría en las PCRE que al fin y al cabo son las que usan los lenguajes mas extendidos (o similares)
A nivel personal una de las cosas que descubrí tarde y me resultaron bastante útiles son los constructores zero-width de lookaround (lookahead/lookbehind)

2 respuestas
Lecherito

#15 Bueno, esa página no me llega a gustar del todo ya que no muestra del todo bien los grupos backreferenced. Lo bueno que tiene es que tiene replace.

Si, me centraré en las PCRE.

Quiero entrar en profundidad pero tampoco quiero entrar demasiado rápido además de que las zero-width assertions son quizá algo difícil de entender al principio así que con tiempo llegaré a ellas. El lookaround es algo enorme, lo malo es que del lookbehind tiene fixed length y eso es una putada enorme. Yo las descubrí hace unos meses, tampoco te creas que las descubrí hace mucho y realmente lo que más me gusta de ellas es que es como una "character class" pero que puedes buscar varios caracteres juntos, del tipo (?=ab) además de que no avanzan el puntero de la expresión regular.

Lecherito

3- Modificadores

Los modificadores, como su propio nombre indican, modifican el comportamiento de la expresión regular en si. Modifican el comportamiento de la expresión en determinadas ocasiones, como hacerlo case insensitive. A continuación pongo una lista con los modificadores existentes (son poquitos), son bastante sencillos de entender, no es realmente la miga de las expresiones regulares.

  • Modificador g: Este modificador indica a la expresión regular que NO se pare tras el primer match. Por defecto una expresión regular sólo tratará exclusivamente de hacer un match, una vez que lo haga lo demás se la sudará. Con este modificador le decimos que no lo haga de esa manera y busque todo lo que concuerde con el patrón que le indiquemos.

  • Modificador i: Este es uno de los más sencillos, simplemente le dice a la expresión regular que sea CASE INSENSITIVE. Por defecto una expresión regular es case sensitive.

  • Modificador x: Hace que la expresión ignore los ESPACIOS en blanco (tanto espacios, como tabulaciones y lineas nuevas) y hace que no tengan nada que ver con la expresión regular en si, además de habilitar los comentarios dentro de la propia expresión regular. Más adelante veremos ejemplos de esto, por ahora no es importante, simplemente es para organizar un poquito la expresión y que no sea un chorizo imposible de entender (como muchas lo son xD).

  • Modificador s: Hace que el caracter especial . también acepte las nuevas lineas.

  • Modificador m: Hace que los anchors ^ $ (ya veremos en el capítulo 5 qué son) indican el comienzo y final de cada linea, respectivamente, en vez del comienzo y final del texto total.

Hay 3 maneras de usar los modificadores y meterlos en la expresión regular que son las siguientes:

  • 1- La primera manera de usar los modificadores se podría decir que se divide en dos, como ya dije en el capítulo previo. Una de esas dos manera es en los lenguajes de programación que usas la expresión regular del tipo /expresion/gxism, se meten donde ponen los modificadores, tan simple como eso. Otra manera es poniéndole los modificadores en el método (como en Java) del tipo Pattern pattern = new Pattern("expresion", Pattern.CASE_INSENSITIVE);

  • 2- Hay otra manera de meter el modificador internamente dentro de la propia expresión regular (quizá algo raro de ver al principio) pero si tienes la expresión /expresion/i (haciéndola case insensitive) puedes cambiarla a esto /(?i)expresion/, estas dos expresiones significan exactamente lo mismo aunque la segunda tiene una VENTAJA enorme, puedes CANCELAR el modificador (convirtiéndola en case sensitive) cuando te apetezca!, un ejemplo de esto es: /(?i)expre(?-i)sion/, esta expresión significa que es case insensitive en la palabra EXPRE, y que sion ha de ir en minúsculas. Esta es una notable ventaja respecto a la primera manera ya que se puede quitar el modificador en la parte que se quiera.

  • 3- La tercera y última manera es usar el modificador para única y exclusivamente un grupo (que no se guarda). Del tipo que la expresión de antes (/(?i)expre(?-i)sion/) fácilmente se podría acortar de la siguiente manera /(?i:expre)sion/. Tan simple y llano como esto.

Estas son las 3 maneras de incluir los modificadores en nuestra expresión regular.

PD: Cada lenguaje tiene sus propios modificadores y a veces distan mucho unos de otros, recomiendo antes de usarlos mirar los que existen para tu lenguaje de programación en concreto para estar seguro.

aNuBiS

Buen trabajo. Dada la flexibilidad y las capacidades que aportan es increíble que tan poca gente controle del tema, ¡a favoritos!

1 respuesta
Lecherito

#18 Si bueno, todavía queda toda la chicha xDDD Veremos a ver como me organizo con esto uff.

#20 Los estoy poniendo con referencias y link. Realmente me parece que además de no caber, va a ser demasiado tocho así que lo divido por capítulos y pongo referencias a los capítulos.

1 respuesta
DarkSoldier

xk no los agrupas en el primer post ??? xD a modo de sugerencia eh?

#19 +1 pues! buen trabajo!

1 respuesta
eisenfaust

Cuando este mas maduro podrias portarlo a MarkDown y meterlo en un repo en GitHub.

1 2 respuestas
Lecherito

#21 Parece molar lo de MarkDown pero la verdad es que tampoco tengo mucho tiempo (ni ganas) de mirar como funciona xD

C

A favoritos.

Gracias caballero.

Lecherito

4- Caracteres especiales en las expresiones regulares

Como ya dije anteriormente existen dos tipos de caracteres en una expresión regular, los caracteres literales, y los caracteres especiales (al igual que en un lenguaje la palabra int por ejemplo). Sin más dilación, dejo una lista con los caracteres especiales {}[]/\|$^.()-*+:?. (La / es solo en algunos lenguajes de programación ya que esa barra delimita la expresión regular en si.)

Cuando en una expresión regular quieres por ejemplo encontrar un precio del tipo $20, no puedes usar la expresión regular /$20/, ¿por qué? El carácter $ es un carácter especial dentro del vocabulario del motor de la expresión regular, pero... y si no podemos usar el carácter $, ¿cómo hacemos para encontrar $20? Muy simple!! Existen dos formas de hacer esto:

  • 1- Hay un carácter (uno con un carácter especial) que sirve para que el SIGUIENTE carácter no tenga significado especial, y éste carácter es la [/b] así que si se usa /\$20/ encontrará el precio!

  • 2- La siguiente forma de hacerlo es con "otros caracteres especiales" esto es, TODO lo que esté en una expresión regular entre /\Qtexto\E/ se tomará como texto literal! Tan simple y llano como eso, da igual los caracteres que pongas entre \Q y \E, todo será literal. En el ejemplo anterior sería /\Q$20\E/.



  • Carácter [/b]: Uno de los caracteres especiales de las expresiones regulares, sirve tanto para QUITAR el significado especial al siguiente carácter como para PONÉRSELO, (Al igual que \Q).

  • Caracteres b: Delimitan los grupos (como ya dije en el punto anterior), los grupos sirven para dos cosas principalmente, poder usar un valor que has cogido de la expresión regular, y poder usar cuantificadores en varios caracteres a la vez (en el grupo).

  • Caracteres []: Significa ALTERNACIÓN, se alterna entre cada uno de los caracteres que hay entre los corchetes. La mayoría de los caracteres pierden su significado en este grupito. Por ejemplo $ pierde su significado especial si se encuentra entre corchetes! Un ejemplo [abc]. Hay rangos de caracteres (por ejemplo el alfabeto o los números), es aquí donde el - tiene significado especial, fuera de aquí no tiene ningún significado especial, incluso si está dentro pero está en un borde (no está rodeado de 2 caracteres) no tiene ningún significado especial. Lo que quiere decir este guión es que puede haber por ejemplo números del [1-9] bastante previsible lo que significa, puede haber un número del 1 al 9 (123456789). También se puede NEGAR esta clase, simplemente poniendo ^ al principio, por ejemplo [^ab], que significaría todo lo que sea, menos las letras a y b.

  • Carácter .: Este es el carácter comodín!, es una abreviatura a [^\s] (que quiere decir, pilla todo lo que no sea un espacio, tabulador o nueva línea). Así que con este carácter puedes coger lo que quieras.

  • Carácter -: Este carácter solo es epecial (como ya dije anteriormente) cuando se usa entre los caracteres [ y ] y está en medio de otros dos caracteres (en los lados no tiene ningún significado especial), actuando así como puente para un listado de letras o números consecutivos. Un ejemplo [a-z] (todas las letras minúsculas).

  • Carácter :: Este carácter también es especial es dos situaciones concretas (y una ya se ha visto con un ejemplo con los modificadores), la otra situación es cuando queremos que un grupo no tenga "backreference" y se hace así cmd[/cmd] (no preocuparse por lo que significa ahora mismo, en el capítulo siguiente, el 5, se explicará lo que son los grupos!)

  • Carácter |: Indica alternación dentro de los grupos (se verá con más profundidad en el capítulo de los grupos)

  • En general: Al empezar un grupo, cuando empieza con el símbolo ? tiene una serie de caracteres detrás que son especiales como :>=! que se verán más adelante en el capítulo 5 y que fuera de ahí no tienen ningún significado especial.



  • Carácter ^: Delimita la expresión regular, diciéndole que ese es el PRINCIPIO del texto que andamos buscando, o el principio de línea (justo después del \n (new line)) cuando está presente el modificador m.

  • Carácter $: Delimita la expresión regular, diciéndole que ese es el FINAL del texto que andamos buscando, o el final de línea (justo antes del \n (new line)) cuando está presente el modificador m.

  • Carácter \A: Es casi lo mismo que pero con la diferencia de que SIEMPRE hará match en el PRINCIPIO del texto, da igual que esté presente el modificador m.

  • Carácter \Z: Es casi lo mismo que $ pero con la diferencia de que SIEMPRE hará match en el FINAL del texto, da igual que esté presente el modificador m.

  • Carácter \G: Este anchor es muy muy especial, al usar el modificador global, por defecto el motor de la expresión regular le dará igual donde se quedó anteriormente la expresión, simplemente buscará para la siguiente (ejemplo), \G lo que indica es la posición en la que se quedó el motor de la expresión regular en la anterior pasada del modificador global. Esto es, si por ejemplo el ^ indica el principio de la línea/cadena, este indica donde se quedó la anterior pasada de la expresión, esto se hace para no tener cosas por medio que NO nos interesan, y pondré un ejercicio donde lo vais a entender realmente. (Ejemplo)



  • Caracteres {}: Delimitan uno o dos números separados por una coma ({2,6}) y lo que significa es que el grupo directamente anterior (ya veremos qué es un grupo) o el carácter inmediatamente anterior se REPITE entre 2 y 6 veces. Ejemplos: {2} Significa que se repite 2 veces. {3,} Significa que se repite 3 o MÁS veces. {1,3} Se repite entre 1 y 3 veces.

  • Carácter ASTERISCO: Este carácter, sabiendo lo que significan los corchetes (punto anterior) será muy fácil de entender ya que es un shortcut de {0,} lo que quiere decir que puede haber 0 o más, de una cosa (ya sea grupo, carácter, o lo que sea).

  • Carácter +: Muy parecido al anterior, la diferencia es que en este cuantificador tiene que haber por lo menos UN elemento por lo que se puede deducir, que es un shortcut de {1,}. Este tiene otro significado, que es el de darle la propiedad de ser posesivos a otros cuantificadores, se explicará en #28 también.

  • Carácter ?: Parecido a ASTERISCO y + pero este delimita {0,1}. A parte de este significado hay otro significado también muy útil el cual explicaré en #28 junto a otra cosa sobre los cuantificadores y el segundo significado de +.




Hay un error ya que el caracter especial * lo coge como un nuevo item de la lista, hay que coregirlo xD

k1k0_o

Como recurso yo añadiria la web regexplanet.com.

Entre otras cosas de utilidad testea expresiones con cadenas de entrada y te convierte la ER para que pueda ser leida en JAVA

1 respuesta
Lecherito

#25 Añadido! Aunque para java solamente hay que doblar las [/b] ya que hay que escaparlas para la expresión y luego se queda una sola barra para la expresión regular.

PD: Me gustaría leer opiniones sobre lo que hay escrito hasta ahora :3

1 respuesta
k1k0_o

#26 Cierto, pero prefiero utilizarlo para no equivocarme :-)

Lecherito

4.2- Como funcionan los cuantificadores y tipos.

Veamos, los cuantificadores indican repetición de algo, grupo, carácter (incluso dentro de una clase de caracteres []). Por ejemplo, la clase de caracteres [0-9]+ indica que hay números del 0 al 9, una o más veces!. Ahora bien, ¿cómo funcionan los cuantificadores? (para ello hay que saber un poquito sobre como funcionan los motores de las expresiones regulares pero intentaré hacer que parezca sencillo). Los cuantificadores, *, +, y {} por defecto son unos cuantificadores GREEDY, si a un cuantificador le añades un ?, se convierte en lazy, pero si por el contrario le añades un +, se convierte en possessive. Expliquemos qué significa cada una de estas cosas:

  • Greedy: Estado por defecto de los cuantificadores, greedy (codicioso) significa que va a encontrar la MAYOR cadena a su alcance esto es: /".ASTERISCO"/ esta expresión regular en esta cadena "hola" "hola" url="http://regex101.com/r/yR6mR5"[/url] va a encontrar todo lo que haya entre las dos comillas, sin importarle nada mas. Ahora bien, si resulta que si por culpa del cuantificador no hay match con la cadena, el motor hará backtracking (volver hacia atrás) y cada vez coger menos caracteres para ver si de esa manera es capaz de encontrar algo. Un muy buen ejemplo es este, el cual el razonamiento de la expresión regular sería encontrar hol, literalmente, luego cualquier carácter repetidamente, qué pasa con esto? que ENCONTRARÁ hasta el final de la cadena por lo tanto la b en un principio no hará nada con ella, pero el motor, que es muy listo dice, si tengo que encontrar también una b, probemos a quitar caracteres a lo que he encontrado de .ASTERISCO a ver si encuentro alguna b, y sí, la encuentra en el final!

  • Lazy: Éste, parecido a Greedy, pero en vez de encontrar las más posiciones posibles, encontrará las menos para satisfacer la condición de la expresión regular, pero esto obviamente como antes, puede cambiar según lo que tenga detrás la expresión regular para que pueda encontrarlo todo bien sin que te diga "no matches".

  • Possessive: Este quizá es el que más cueste de entender, el cuantificador posesivo es el que coge algo y no lo suelta, le da igual chis que chas y le da igual si la expresión regular tiene o no tiene match. En este ejemplo vemos como primero se pilla hola, luego .ASTERISCO+ pilla todo lo posible (hasta la última letra, la c) y luego se intenta encontrar una c por último lugar... pero qué es lo que pasa? que el cuantificado posesivo ya se ha quedado esa c por lo tanto, el resultado de esa expresión regular es que no ha encontrado nada.

Lecherito

Joder, que molesto es que el * no pueda estar en la lista, #15 haz algo con ello!! métele un (?<=^) a la expresión regular de las listas para que no detecte las que hay entre medias del texto! xDD

Me gustaría leer más opiniones de si es entendible lo que estoy explicando!

#30 El caso es que creo que sí hay límite de caracteres, por eso me da miedo meterlo todo en #1 y con los links creo que queda todo mejor organizado en vez de el chorizaco enorme del principio, no?

Y la verdad es que no quiero ponerlo todo, quiero dar unas lecciones de lo "básico" de las expresiones regulares, como funciona cada cosa, pero es que cada lenguaje tiene sus cosas propias, eso ha de buscarlo la gente, intento explicar lo general para todos los lenguajes.

#30 Probaré con ello, aparte de tenerlo organizado también por links, en vez de #numero le meteré un spoiler. Huh, eso de que salte de linea con el spoiler no mola! :-c

1 respuesta
LOc0

¡Joder qué curro te estás pegando! Dos consejillos sobre la organización del manual:

Creo que estaría más claro todo metido en #1 (aunque no sé si hay límite de caracteres :S ), más que tenerlo entre medias de comentarios.

Si no quieres olvidarte de nada importante échale un vistazo a:

http://php.net/manual/es/pcre.pattern.php

#29 Si no hay límite de caracteres podrías meter cada capítulo en un spoiler...

Salu2 ;)

1 respuesta