regex - letras - probar expresiones regulares
¿Cuáles son las buenas expresiones regulares? (9)
He trabajado durante 5 años principalmente en aplicaciones de escritorio Java accediendo a bases de datos Oracle y nunca he usado expresiones regulares. Ahora entro en Stack Overflow y veo muchas preguntas sobre ellos; Siento que me perdí algo.
¿Para qué usas expresiones regulares?
PD, lo siento por mi mal inglés
Como ya sabrá, Oracle ahora tiene expresiones regulares: http://www.oracle.com/technology/oramag/webcolumns/2003/techarticles/rischert_regexp_pt1.html . He utilizado la nueva funcionalidad en algunas consultas, pero no ha sido tan útil como en otros contextos. La razón, creo, es que las expresiones regulares son las más adecuadas para encontrar datos estructurados enterrados dentro de datos no estructurados.
Por ejemplo, podría usar una expresión regular para encontrar los mensajes de Oracle que están rellenos en el archivo de registro. No es posible saber dónde están los mensajes, solo cómo se ven. Entonces, una expresión regular es la mejor solución para ese problema. Cuando trabajas con una base de datos relacional, los datos suelen estar preestructurados, por lo que una expresión regular no brilla en ese contexto.
Considera un ejemplo en Ruby:
puts "Matched!" unless //d{3}-/d{4}/.match("555-1234").nil?
puts "Didn''t match!" if //d{3}-/d{4}/.match("Not phone number").nil?
La "/ / d {3} - / d {4} /" es la expresión regular, y como puede ver, es una forma MUY concisa de encontrar una coincidencia en una cadena.
Además, al usar grupos puedes extraer información, como tal:
match = /([^@]*)@(.*)/.match("[email protected]")
name = match[1]
domain = match[2]
Aquí, los paréntesis en la expresión regular marcan un grupo de captura, para que pueda ver exactamente QUÉ datos coinciden, para que pueda seguir procesando.
Esto es solo la punta del iceberg ... hay muchas cosas diferentes que puedes hacer en una expresión regular que hace que procesar texto sea REALMENTE fácil.
Las expresiones regulares (o Regex) se usan para emparejar patrones en cadenas. De este modo, puede extraer todas las direcciones de correo electrónico de un texto porque sigue un patrón específico.
En algunos casos, las expresiones regulares se incluyen en barras diagonales inversas y, después de la segunda barra, se colocan opciones como la insensibilidad a mayúsculas y minúsculas. Aquí hay uno bueno :)
/(bb|[^b]{2})/i
Hablado puede decir "2 be or not 2 be".
La primera parte son los (corchetes), están divididos por la tubería | carácter que equivale a una declaración o para que (a | b) coincida con "a" o "b". La primera mitad del área de tuberías coincide con "bb". El nombre de la segunda mitad no lo sé, pero son los corchetes, coinciden con cualquier cosa que no sea "b", es por eso que hay una thingie símbolo de techo (término técnico) allí. Los corchetes coinciden con un recuento de las cosas que tienen delante, en este caso dos caracteres que no son "b".
Después de la segunda / es una "i" que lo hace insensible a mayúsculas y minúsculas. El uso de las barras de inicio y final es específico del entorno, a veces lo haces y otras no.
Dos enlaces que creo que encontrará útiles para esto son
Si recién comienzas con expresiones regulares, recomiendo encarecidamente una herramienta como The Regex Coach:
http://www.weitz.de/regex-coach/
También escuché cosas buenas sobre RegexBuddy:
Si quieres aprender sobre expresiones regulares, te recomiendo Mastering Regular Expressions . Va desde los conceptos más básicos, hasta los diferentes motores que funcionan debajo. Los últimos 4 capítulos también ofrecen un capítulo dedicado a cada uno de PHP, .Net, Perl y Java. Aprendí mucho de él y todavía lo uso como referencia.
Una expresión regular (regex o regexp para abreviar) es una cadena de texto especial para describir un patrón de búsqueda. Puedes pensar en expresiones regulares como comodines con esteroides. Probablemente esté familiarizado con las notaciones comodín como
*.txt
para buscar todos los archivos de texto en un administrador de archivos. El equivalente en expresiones regulares es.*/.txt$
.
Un gran recurso para expresiones regulares: http://www.regular-expressions.info
Estas RE son específicas de Visual Studio y C ++, pero a veces las he encontrado útiles:
Encuentre todas las ocurrencias de "routineName" con parámetros no predeterminados pasados:
routineName / (: a + /)
Por el contrario, para encontrar todas las apariciones de "routineName" con solo valores predeterminados: routineName / (/)
Para encontrar el código habilitado (o deshabilitado) en una compilación de depuración:
/#Si. _DEPURAR*
Tenga en cuenta que esto captará todas las variantes: ifdef, if defined, ifndef, if! Defined
La expresión regular más cool de todos los tiempos :
/^1?$|^(11+?)/1+$/
Prueba si un número es primo. ¡¡Y funciona!!
NB: para que funcione, se necesita un poco de configuración; el número que queremos probar tiene que convertirse en una cadena de " 1
" s primero, luego podemos aplicar la expresión para probar si la cadena no contiene un número primo de " 1
" s:
def is_prime(n)
str = "1" * n
return str !~ /^1?$|^(11+?)/1+$/
end
Hay una explicación detallada y muy accesible en el blog de Avinash Meetoo .
Validación de contraseñas seguras :
Este validará una contraseña con una longitud de 5 a 10 caracteres alfanuméricos, con al menos una mayúscula, una minúscula y un dígito:
^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9]{5,10}$