Diferencia entre revisiones de «Hacks para sistemas operativos Unix-like/Usando expresiones regulares»

Contenido eliminado Contenido añadido
Correcciones ortográficas y de estilo.
Línea 1:
== EXPRESIONES REGULARES ==
 
 
Una expresión regular es una forma de representar a los lenguajes regulares (finitos o infinitos) y se construye utilizando caracteres del alfabeto sobre el cual se define el lenguaje.
 
Las expresiones regulares son una poderosa herramienta para manipular textos y datos, con el uso de expresiones regulares usted puede ahorrar tiempo y problemas a manipular documentos, mensajes de correo electronicoelectrónico (e-mail), archivos de registro, cualquier tipo de informacioninformación que contenga texto o datos, por ejemplo, las expresiones regulares juegan un papel importante en la construcionconstrucción de programas que corren sobre internet (cgi-bin), ya que pueden implicar textos y datos de todo tipo1tipo.
 
Las expresiones regulares no son un programa de computadora pero son incluidas como parte de un programa mas grande, el clasicoclásico ejemplo es grep2, una potente utilidad comunmentecomúnmente utilizada en Unix; Las expresiones regulares pueden ser encontradas en:
 
Lenguajes de programacionprogramación (perl, tcl, awk, python, java, ...)
Editores (Emacs, vi, Nisus Writer, ... )
Entornos de desarrollo (Delphi, Visual C++, ...)
 
El origen de las expresiones regulares recae en la teoriateoría de automatasautómatas ty la teoriateoría formal de lenguajes (juntos parte de la teoriateoría de las ciencias de la computacioncomputación). Estos campos estundianestudian modelos de computacioncomputación (automataautómata) y formas de describir y clasificar lenguajes formales. En los años 40's Warren McCulloch y Walter Pitts describieron el sistema nervioso describiendo a las neuronas como pequeños y simples automatasautómatas. El matematicomatemático Stephen Kleene describiodescribió estos modelos usando su propia notacionnotación matematicamatemática llamada conjuntos regulares. El famoso cientificocientífico de computacioncomputación Ken Thompson, uno de los creadores de Unix, implemento esta notacionnotación en el editor de texto qed, , despuesdespués en el editor de texto ed y eventualmente en grep. Desde ese tiempo las expresiones regulares han sido ampliamente usadas en Unix y programas tipo Unix como: expr, awk, emacs, vim, lex, perl ...
 
En la sintaxis basicabásica de regexp para Unix, la mayoriamayoría de los caracteres son tratados como literales que solo se cumplen para si mismos (a se cumple para a, ab, aab, etc; abc se cumple para abc, abcc, abcb, etc).
 
Las exprecionesexcepciones a esta regla son los llamados meta-caracteres:
 
*'''.''' Cualquier caractercarácter que aparezca una vez.
*'''[ ]''' Cualquier caractercarácter que aparescaaparezca una vez, que se encuentre entre las llaves. ej. [abc] sirversirve para a, b, óo c, [a-z] sirve para las minusculasminúsculas (entiendaseentiéndase como un rango entre a y z), [abcdq-z] es cumplida por a, b, c, d, q, r, s, t, u, v, w, x, y, z, asi como [a-dq-z].
*'''[^]''' Cualquier caractercarácter que aparescaaparezca una vez, que no esteesté contenido entre lsalas llaves, ej [^abc] es cumplida por cualquier caractercarácter menos a, b y c, [^a-z] es cumplida por cualquier caractercarácter que no sea minusculaminúscula.
*'''^''' Comienzo de linealínea, ej ^a todas las cadenas que comiencen por a.
*'''$''' Cumplida por el fin de linea, ej $a todas las cadenas que terminen en a.
*'''*''' Una expresionexpresión que simbolizesimbolice un solo caractercarácter seguido de un asterisco es cumplido por 0 o masmás copias de las expresiones, ej x* se cumple para: xxc xa xxxb xaos.
No hay representacionrepresentación para la unionunión.
xxc xa xxxb xaos
No hay representacion para la union
 
Algunos ejemplos varios:
 
*[hc]at : cat y hat.
*[^b]at : 3 caracteres qeuque ternminenterminen en aat y no comienzencomiencen por b.
*^[hc]at : hat y cat pero solo al comiensocomienzo de la linealínea.
*[hc]at$ : hat, cat, pero solo al fin de la linealínea.
 
 
 
La sintaxis basicabásica de regex para Unix a quedado obsoleta por POSIX (IEEE 1003), un estandarestándar que intento unificar algunos procesos en la familia de sistemas operativos Unix. La extensionextensión hecha por POSIX es similar en sintaxis a la tradicional de Unix con metacaracteres añadidos:
 
*+ Cumplido por el ultimoúltimo bloque una omaso más veces, ej ba+ => ba, baa, baaa
*? Cumplido por el ultimoúltimo bloque cero o una vez
*| La opcionopción (o unionunión de conjuntos) es cumplida por la expresionexpresión antes y despuesdespués del operador, ej “abc|def” => abc, def
Todos los metacaracteres deben ser precedidos por \ sesi se desea hacer una busquedabúsqueda por ellos.
ej “abc|def” => abc, def
Todos los metacaracteres deben ser precedidos por \ se se desea hacer una busqueda por ellos
 
EXPRESIONES REGULARES EN JAVA
 
==EXPRESIONES REGULARES EN JAVA ==
 
 
Generar un patronpatrón con una expresionexpresión regular
 
Pattern p = Pattern.compile("a*b");
Línea 64:
boolean pos_ini = m.find();
 
Obtener numeronúmero de concurrencias
 
int cuantos = m.groupCount();
 
 
Summario'''Sumario de construcciones de expresiones regulares en java'''
 
Constructor Coincide Caracteres
Summario de construcciones de expresiones regulares en java
*x El carácter x
 
*\\ El carácter del backslash
Construct Matches
*\0 n El carácter con el valor octal 0 n (0 < = n < = 7)
 
*\0nn El carácter con el nn octal del valor 0 (0 < = n < = 7)
Caracteres
*\0mnn El carácter con el mnn octal del valor 0 (0 < = m < = 3, 0 < = n < = 7)
x El carácter x
*\\xhh El carácter con el hh hexadecimal del backslashvalor 0x
*\0 n uhhhh El carácter con el valorhhhh octalhexadecimal 0del n valor (00x < = n < = 7)
*\0nnt El carácter conde el nn octal del valor 0lengüeta (0 <' = n <\u0009 =' 7)
*\0mnnn El carácter condel elnewline mnn(avance octalde del valor 0línea) (0 <' = m < = 3, 0 < = n <\u000A =' 7)
*\xhhr El carácter conde ella hhvuelta hexadecimalde delcarro valor( 0x' \u000D ' )
*\uhhhhf El carácter conde elsalto hhhhde hexadecimalpágina del( valor' \u000C 0x' )
*\ta El carácter dealerta lengüeta(bell) ( ' \u0009u0007 ' )
*\ne El carácter del newline (avance de línea)escape ( ' \u000Au001B ' )
*\rc x El carácter de lacontrol vueltaque decorresponde carro ( ' \u000Da 'x )
\f El carácter de salto de página ( ' \u000C ' )
\a El carácter alerta (bell) ( ' \u0007 ' )
\e El carácter escape ( ' \u001B ' )
\c x El carácter de control que corresponde a x
 
Clases del carácter
 
*[abc ] a , b , o c (clase simple)
*[ ^abc ] Cualquier carácter exceptúandoexceptuando a , b , o c (negación)
*[ a-zA-Z ] a hasta z o A hasta Z , inclusivo (gama)
*[ a-d[m-p ] ] a hasta d , o m hasta p : [ uno-a-dm-p- p ] (unión)
*[ a-z&&[def ] ] d , e , o f (intersección)
*[ a-z&&[^bc ] ] a hasta z , a excepción de b y de c : [ ad-z ] *(substracciónsustracción)
*[ a-z&&[^m-p ] ] a hasta z , y no de m hasta p : [ a-lq- z ] *(substracciónsustracción)
 
Clases predefinidas del carácter
 
. Cualquier carácter (puede o no puede emparejar los adaptadores de la línea )
*\d Un dígito: [ 0-9 ]
*\D Un no-dígito: [ ^0-9 ]
*\s Un carácter del whitespace: [ \t\n\x0B\f\r ]
*\S Un carácter del non-whitespace: [ ^\s ]
*\w Un carácter de la palabra: [ a-zA-Z_0-9 ]
*\W Un carácter de la no-palabra: [ ^\w ]