Las expresiones regulares son una poderosa y estandarizada forma de buscar y reemplazar texto con complejos patrones de caracteres. A los que las han usado expresiones regulares (ER de ahora en adelante) en otros lenguajes (como Python), la sintaxis le parecerá muy similar. Este tutorial es para Actionscript 3, pero funciona para muchos otros lenguajes, como PHP o Perl.
Para ver como trabajan las ER (Expresiones Regulares) realizaremos una clase para verificar la correcta escritura de Números Romanos.
En los Números Romanos, hay 7 caracteres que son repetidos y combinados en varias formas para representar números:
I = 1
V = 5
X = 10
L = 50
C = 100
D = 500
M = 1000
Las siguientes son algunas reglas generales que debemos tener en cuenta al construir números romanos:
Los caracteres son aditivos. I es 1, II es 2, y III es 3. VI es 6 (literalmente, “5 y 1”), VII es 7 y VIII es 8.
Los caracteres de la unidad y decenas (I, X, C y M) pueden repetirse hasta tres veces. Para el 4, debe restar del cinco inmediatamente superior. No puede representar 4 como IIII; en lugar de eso se representa con IV (“1 menos que 5”). El número 40 se escribe como XL (10 menos que 50), 41 como XLI, 42 como XLII, 43 como XLIII y 44 como XLIV (10 menos que 50, y 1 menos que 5).
De forma similar, para el 9, debe restar de la decena inmediata: 8 es VIII, pero 9 es IX (1 menos que 10), no VIIII (ya que la I no se puede repetir cuatro veces). El número 90 es XC, 900 es CM.
Los caracteres para "cinco" no se pueden repetir. El número 10 siempre se representa como X nunca como VV. El número 100 siempre es C nunca LL.
Los números romanos siempre se escriben del mayor al menor y se leen de izquierda a derecha, de manera que el orden de los caracteres importa mucho. DC es 600; CD es un número completamente diferente (400, 100 menos que 500). CI es 101; IC no es siquiera un número romano válido (porque no puede restar 1 directamente de 100; tendrías que escribirlo como XCIX, que es 10 menos que 100 y 1 menos que 10).
Empecemos con la clase, crea un archivo .as y nómbralo Roman.as y coloca el siguiente código:
Código :
package clases{
public class Roman{
private var pattern:RegExp = /^M?M?M?$/;
function Roman(){
//Constructor de la clase
}
public function ValidarRomano(romano:String):Boolean{
return pattern.test(romano);
}
}
}
La variable pattern es donde se almacenara el patrón de la ER, en ActionScript 3 hay dos formas de crear una expresión regular. La primera es colocando entre 2 slash el patrón a verificar, la otra forma seria instanciando la clase RegExp mendiante new:
Código :
pattern:RegExp = new RegExp("^M?M?M?$", "");
Seguidamente tenemos la función ValidarRomano(), alli usamos el método test() que devuelve true o false, si el String cumple o no el patrón.
Pongamos atención ahora en la variable pattern, vemos que comienza con el metacaracter ^, con esto le estamos diciendo a la ER que lo que sigue coincida sólo con el comienzo de la cadena. Tenemos M? para buscar la aparición de 0 ó una M. Se repite 3 veces que como ya vimos es la máxima cantidad de veces que dicho carácter puede repetirse, al final colocamos $ para que lo anterior preceda sólo al fin de la cadena. Cuando se combina con el carácter ^ al principio, significa que el patrón debe coincidir con la cadena al completo, sin otros caracteres antes o después de las M.
Abre un archivo .fla, nombrado testRoman.fla y guárdalo en la misma carpeta donde guardaste la clase y coloca las siguientes líneas de código
Código :
import Roman
var regExp:Roman = new Roman();
trace(regExp.ValidarRomano("M"));
trace(regExp.ValidarRomano("MM"));
trace(regExp.ValidarRomano("MMM"));
trace(regExp.ValidarRomano("MMMM"));
trace(regExp.ValidarRomano(""));
Al ejecutarlo veremos que las 3 primeras cumplen con el patrón y por ende devuelven true, la cuarta debido a que el carácter M se repite cuatro veces no cumple con la condición y arroja false y como dato curioso si pasamos una cadena en blanco devuelve true, esto es debido a que en la condición las M son opcionales. Por ahora tenemos el chequeo de los miles listo, pasemos a las centenas.
Para Las centenas hay 4 posibles patrones a verificar:
CM
CD
0 a 3 caracteres C
D, seguido por 0 a 3 caracteres C
Las ultimas 2 pueden combinarse como una D opcional seguida de 0 a 3 caracteres C. Para la nueva validación modifica la variable pattern de la siguiente forma:
Código :
pattern:RegExp = /^M?M?M?(CM|CD|D?C?C?C?)$/;
Concentrémonos en lo nuevo que se halla dentro de lo paréntesis, en el definimos 3 condiciones mutuamente exclusivas separadas por una barra vertical (|), con esto estamos buscamos la aparición de CM ó CD ó una D opcional, seguida de 0 a 3 caracteres. Para probarlo copia en tu archivo .fla lo siguiente:
Ahora solo resta optimizar el patrón, para ello usaremos la metasecuencia {n,m}. En ActionScript las metasecuencias son secuencias de caracteres con un significado especial dentro del patrón de la ER. La metasecuencia {n,m} buscara la aparición de un elemento de 'n' a 'm' veces.
Al final la clase completa se vería de la siguiente forma:
Código :
package {
public class Roman{
private var pattern:RegExp = /^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/;
function Roman(){
//Constructor de la clase
}
public function ValidarRomano(romano:String):Boolean{
return pattern.test(romano);
}
}
}
Con esto quedaría listo. En los archivos de descarga podrás encontrar la clase y un ejemplo .fla de su utilización.
En el próximo tip sobre Expresiones Regulares, hablare sobre los flags, los grupos con nombre y veremos una utilización más avanzada de las ER. [Ve Ejemplo][Descarga Ejemplo .FLA]
Ya empiezan a aparecer más y más Tips de Flex, son voces que hablan del nuevo cambio que ha de venirnos
Genial por el Tip Por:MorphX
Gran Tip Realmente me servirá de mucho. ¿Puedes poner cómo serían todos los operadores lógicos (AND, XOR, NOT, ect)? Por:Zah
Operadores lógicos como tal no hay, solo meta caracteres que dependiendo de como los usemos nos darían esa función. Por ejemplo si quiero usar el operador AND(&&) para verificar un texto que comience por Hola y termine en Shogoki, sin importar la cantidad de palabras que tenga en medio, tendría algo como esto:
Código :
var pattern:RegExp = /^Hola\D*Shogoki$/i
trace(pattern.test("Hola, como estas Shogoki")) //true
trace(pattern.test("Hola!!! Shogoki")) //true
trace(pattern.test("hola espero que estés bien shogoki")) // true
trace(pattern.test("Hola")) //false
De todos el único que arroja false es el ultimo debido a que le falta la frase Shogoki al final. Ademas gracias al flag "i" que colocamos al final , acepta tanto mayúsculas como minúsculas Por:shogoki
Aquí hay una buena referencia sobre expresiones regulares en Java (iguales que en as3) Por:Zah
Ahora sí, quedó más bonito. Ya está en portada. Por:Freddie
ya estudie division de 0 , multiplos y estoy estuduando numeros romanos me falta estudiar descomponer Por:candelaria_blog
los mumeros son muy dificiles para encontrar y sobre todo en letra Por:glenda_blog
no sirven Por:pedro_blog
aqui nunca hay nada tienen que poner los numeros romano del uno al infinito solamente esta asta el 1,000 mas nada que paso halli con ustedes tienen que pones calidad no eso que pusieron miren que se lo estoy dieciendo nunca yo e visto wikiopedia a cometido ese error esa empresa le esta ganando mire que se lo estoy diciendo los niños siempre buescan esa informacion que los maestro estaasiendo esas investigacienes Por:yulisa_blog
yulisa_blog :
aqui nunca hay nada tienen que poner los numeros romano del uno al infinito solamente esta asta el 1,000 mas nada que paso halli con ustedes tienen que pones calidad no eso que pusieron miren que se lo estoy dieciendo nunca yo e visto wikiopedia a cometido ese error esa empresa le esta ganando mire que se lo estoy diciendo los niños siempre buescan esa informacion que los maestro estaasiendo esas investigacienes
esto es una mierda por que yo pongo numeros del 1 asta 1000 mesale solo lo que pasa sale 1 ,el 5 ,10 ,50, 100 Por:anddrea_blog
pongan todos los numeros en romano esta bien su informacion pero les falta agregar los demas numeros Por:claudia _blog
LOS NUMEROS ROMANOS MXCLXVII 1997 27 XXVII Por:paola valentina_blog
no lo entiendo paranada Por:yuyi_blog
tienen que escribir sin que falte un numero romano del 1 al 10000 Por:victor-blog
Me gusto tu information grasias. Por:yolanda-blog
quiero buscar 50 verbos regulares Por:kevin-blog
1997 = MCMXCVII
2305 = MMCCCV
MI PREGUNTAS... 5000?
10000?
50000?
100000?
500000?
1000000?
5000000?
Yo creo recordar de la época del colegio, que para estas cantidades que los romanos normalmente no usaban, al poner uno o varios guiones encima de la M o la D multiplicabas el valor de esta x 1000 por cada guion superpuesto... pero no estoy muy seguro... (no se porqué no lo miro en la wikipedia, es que me ha dado nostalgia del cole)
ej:
1.500.000 = MD(con 1 guión encima)(cada guión sería como añadir 3 ceros al final del resultado en decimal)
7.845.439 = D(con 2 - encima) MMDCCCXLV(con 1 - encima)CDXXXIX. el numerico sería asi de largo creo yo:
--D-MMDCCCXLV.CDXXXIX (con los guiones encima y sin el punto)
aunque ya os digo... no estoy seguro del todo Por:meidyn-blog
pz kual es
la maxima kantidad
ke
se
puede
poner
en numeres
Romanoz Por:gera-blog
hola yo tampoco veo claro como es eso de los numeros como 50000 Por:MAGNOLIA-blog
quiero que me presenten los numeros romanos del uno al mil Por:naiomi-blog
qui ero saber mas sobre los numeros romanos Por:german daniel moreno tore
espero que los usua rios eesten conformes por que yo no lo estoy Por:yulimar -blog
quiero los numeros romanos del 1 hasta el 50 Por:albany gacia-blog
son jeniales y faciles ejempla:6000=vm Por:lupita -blog
como se escriben los nueros romanos del uno al 1000 Por:isis bustillo-blog
pues yo de este código no me enterado de ná Por:un lerdo-blog
QUIERO LOS NUMEROS DEL 1 AL 5000 Por:BRIGITTE-blog
NESESITO LOS NUMEROS ROMANOS DEL 1 5000 POR FABOR Por:LUISA -blog
megustaria quefueran mas explicitos con las tareas que se preguntan.
gracias Por:beatriz bello peinado-blo
me parese que esta pagina no sale nada concreto de lo que yo necesito gracias Por:diana -blog
mira quiero saber los numeros romanos de 1000 en 1000 al 10000 Por:lola-blog
CHUPAME BIEN LA CONCHA PUTOS DE UNA PAGA Por:PETE-blog
PORQUE NO ME ASES UN BUEN PT CARA DE MANI IJO DE PUTA LA RREEEEEEEE CONCHA DE TU MADREEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEPUTS MAL COJJJIDOSSSSSSSSSSSSSSSSSSSSSSSS JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA CHUPA CONHA EL QUE MIRA LO QUE ESCRIBI ES UN PTRO Por:AGUANT ELPT-blog
chupame la panocha es lo que dedes de aser Por:mi nompre da ser ´pu
malditoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo pudreteeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee perooooooooooooooooooo recontracoñuetumadreeeeeeeeeeeeeeeeeeeeeee
chamo no jallo los numeros romanos del uno al
5000 Por:3v1s-blog