Expresiones regulares
Hoy vamos a ver conocimientos básicos de expresiones regulares, es de señalar que las expresiones regulares nos permiten comparar un texto con un patrón de búsqueda, para ver si el texto contiene el patrón especificado.
Veamos los carácteres especiales:
[ ] cochetes () parentesis {} llaves - guión + más * asterisco . Punto ^ circumflejo $ dolar ? interrogante cerrado | tuberia unix \ Como regla general, la barra invertida \ convierte en normales carácteres especiales, y hace especiales carácteres normales. (se usa para tratar de formar normal un caracter especial) / barra del 7
Tenemos los siguientes operadores para las expresiones regulares:
. Coincide con cualquier carácter pero no incluye nuevas líneas.
\ Para caracteres que son literales, indica que el carácter siguiente es especial y no se puede interpretar literalmente. Ejemplo: \. Indica un punto literal “.”
() Grupo de operadores que están adentro del paréntesis.
{n} genera n veces del elemento anterior. Por ejemplo: a{2} genera ‘aa’.
{n,m} genera entre n y m instancias del elemento anterior. Por ejemplo: a{2,4} genera ‘aa’, ‘aaa’ o ‘aaaa’.
? Indica ninguno o un elemento anterior. Equivale a {0,1} (0 o 1 vez).
* Indica ninguno o algunos de los elementos anteriores. Equivale a {0,} (0 o mas veces).
+ Indica uno o más de los elementos anteriores. Equivale a {1,} (1 o mas veces).
$ Indica que se verifica por el final de la expresión.
^ Indica que se verifica por el inicio de la expresión.
[^abc] Indica cualquier carácter exceptó a, b o c.
Ejemplos de expresiones regulares:
Dirección IP con expresión regular
\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b
Dirección MAC con expresión regular
^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$
Nombre de dominio con expresión regular
^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$
Número flotante con expresión regular
[-+]?(?:\b[0-9]+(?:\.[0-9]*)?|\.[0-9]+\b)(?:[eE][-+]?[0-9]+\b)?
Números Romanos con expresión regular
^(?i:(?=[MDCLXVI])((M{0,3})((C[DM])|(D?C{0,3}))?((X[LC])|(L?XX{0,2})|L)?((I[VX])|(V?(II{0,2}))|V)?))$
Fecha con formato yyyy-MM-dd
(19|20)\d\d([- /.])(0[1-9]|1[012])\2(0[1-9]|[12][0-9]|3[01])
Comments (2)
Como valido esta Sintaxis en Exp.Reg. en codigo C/c++ , ya que tengo que hacer un pequeno compilador en c/c++ que me valide esta sintaxis y como comvierto la sintaxis «Lee» para que haga la funcion del «cout » , agradeceria que me lo enviaran al correo electronico.
——————————————————————————————————————
declarar a entero
declarar b entero
declarar c entero
escribir «Entre valor de a»
Leer a
escribir «Entre valor de b»
Leer b
hacer c = a+b
escribir «el valor de a + b es «, c
Hola,
Muy buen comentario. He probado los ejemplos que propones y me han ayudado mucho, sin embargo, no consigo crear una expresión regular que me controle si un texto está entre parentesis o no, es decir, yo le paso un string a mi programa tal que así «hola esto es un (buen) comentario» y el programa me tiene que decir que está bien, sin embargo, si le digo «Hola esto es un (buen comentario» o «Hola esto es un buen) comentario» me tiene que decir que está mal porque falta uno de los paréntesis. Además, los paréntesis deben de mostrarse en el orden correcto, es decir, la expresión «Hola esto es un )buen( comentario» tampoco sería correcta.
¿Podríais ayudarme?
Un saludo y mi gracias por adelantado