2009-09-19 13 views
15

Soy nuevo en las expresiones regulares y acabo de empezar a aprender algunas. Me preguntaba cuáles son algunas de las expresiones regulares más utilizadas por los programadores. Dicho de otra manera, me gustaría saber para qué son útiles las expresiones regulares. ¿Cómo pueden ayudarme en mis tareas diarias? Prefiero saber expresiones regulares útiles para la programación diaria, no se usan ocasionalmente expresiones regulares como la coincidencia de direcciones de correo electrónico.¿Cuáles son algunas de las expresiones regulares más útiles para los programadores?

¿Alguien? Gracias.

Editar: la mayoría de las respuestas incluyen expresiones regulares para hacer coincidir direcciones de correo electrónico, URL, fechas, números de teléfono, etc. Tenga en cuenta que no todos los programadores tienen que preocuparse por estas cosas en sus tareas cotidianas. Me gustaría saber algunos usos más genéricos de las expresiones regulares, si los hay, qué programadores en general (pueden) usar independientemente del idioma en el que están trabajando.

+0

Si usa * cualquier cosa * de la misma manera todos los días, debe cerrarlo en una [biblioteca | clase | abstracción | ...]. – dmckee

+0

Wow SO es genial, recibí 5 respuestas en 10 minutos después de publicar mis preguntas. ¡Eso es genial! –

+0

@dmckee: ¿Estás seguro? ¿No es más fácil simplemente escribir lo que quieres decir, en lugar de tratar de construir y recordar las características específicas de algún tipo de abstracción que solo tú usas? –

Respuesta

3

Piensa en los campos de entrada que requieren validación, tales como códigos postales, números de teléfono, et cetera. Las expresiones regulares son muy utilizadas para validarlas. También, echar un vistazo a este site, que contiene muchos tutoriales y muchos más ejemplos, algunos de los cuales les presento a continuación:

rangos numéricos. Dado que las expresiones regulares funcionan con texto en lugar de números , la coincidencia de rangos numéricos específicos de requiere un poco de cuidado adicional.

Coincidencia de un número de punto flotante. También ilustra el error común de haciendo que todo en una expresión regular sea opcional.

Coincidencia de una dirección de correo electrónico. Existe una gran controversia sobre acerca de qué es una expresión regular adecuada para que coincida con las direcciones de correo electrónico. Es un ejemplo perfecto que muestra que necesita saber exactamente lo que está tratando de hacer coincidir (y qué no), y que siempre hay una solución de compromiso entre la complejidad y precisión de la expresión regular.

fechas válidas coincidentes. Una expresión normal que coincide con 31-12-1999 pero no 31-13-1999.

Encontrar o verificar la tarjeta de crédito Números. Valide números de tarjeta de crédito ingresados ​​en su formulario de pedido. Encuentre números de tarjeta de crédito en documentos para una auditoría de seguridad .

Y muchas, muchas, muchas más aplicaciones posibles.

+0

Tengo una rutina en algún lugar para generar expresiones regulares para {0,1} -upto-n, para cualquier n, en algún lugar . Simplemente no lo uso con tanta frecuencia, ya que generalmente es más conveniente verificar el número una vez que lo has leído. –

2
  • dirección
  • sitio web
  • paths de archivos
  • teléfono números/Fax/ZIP y otros números que se utilizan en los negocios (números de química, ect.)
  • el contenido del archivo (verificación Correo electrónico si el archivo puede ser un archivo XML válido, ...)
  • tipos de datos de modificación de código y formato (con reemplazo) (GUID, el análisis de los números enteros, ...)
  • ...
1

¿Cómo pueden ayudarme en mis tareas de cada día?

Un uso diario para los programadores podría incluir

  • búsqueda/reemplazo de los datos de la muestra para fines de prueba
  • buscar a través de archivos de registro de patrones de Cuerda (excepciones, por ejemplo)
  • buscar un directorio estructura para archivos de cierto tipo (tan simple como dir *.txt lo hace)

a n AME sólo algunos

2

Upto etiqueta de cierre

([^<]*) 

serio. Yo uso combinaciones de ese manera demasiado a menudo para la comodidad ... Todos deberíamos deshacer de regex: en para peg-parsers, especialmente porque hay un buen estilo gramatical regex para ellos.

+0

Eso es solo hasta la próxima etiqueta. Puede o no ser una etiqueta de cierre. – recursive

+0

@recursive: Claro. Pero donde lo uso, el punto es comer los contenidos del campo. Si quisiera un analizador xml correcto, usaría uno ... –

1

Bueno ... Creo que su pregunta es incorrecta. Parece que estás preguntando acerca de expresiones regulares que podrían/​​deberían ser parte de la codificación, o casi, de cosas como operadores matemáticos. En realidad, si su código depende de manera generalizada en expresiones regulares, probablemente esté haciendo algo muy incorrecto. Para un uso generalizado en todo el código, desea utilizar estructuras de datos que estén mejor definidas y más eficientes para trabajar que las cadenas gestionadas por expresiones regulares.

Lo más cercano a lo que está pidiendo tiene mucho sentido para mí sería algo así como /\s+/ utilizado para dividir cadenas en cantidades arbitrarias de espacios en blanco.

33

ejemplos de expresiones regulares para la entrada

Decimales

  1. enteros positivos ^\d+$

  2. enteros negativos ^-\d+$

  3. enteros ^-?\d+$

  4. Número positiva ^\d*\.?\d+$

  5. número negativo ^-\d*\.?\d+$

  6. número positivo o negativo Número ^-?\d*\.?\d+$

  7. número de teléfono ^\+?[\d\s]{3,}$

  8. teléfono con el prefijo ^\+?[\d\s]+\(?[\d\s]{10,}$

  9. Año 1900-2099 ^(19|20)\d{2}$

  10. Fecha (dd mm aaaa, d/m/aaaa, etc.)

    ^([1-9]|0[1-9]|[12][0-9]|3[01])\D([1-9]|0[1-9]|1[012])\D(19[0-9][0-9]|20[0-9][0-9])$ 
    

IP v4:

^(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]){3}$ 

entrada alfabética

  • Nombre Personal ^[\w.']{2,}(\s[\w.']{2,})+$
  • nombre de usuario ^[\w\d_.]{4,}$
  • contraseña de al menos 6 símbolos ^.{6,}$
  • contraseña o entrada vacía ^.{6,}$|^$
  • correo electrónico ^[_]*([a-z0-9]+(\.|_*)?)[email protected]([a-z][a-z0-9-]+(\.|-*\.))+[a-z]{2,6}$
  • dominio ^([a-z][a-z0-9-]+(\.|-*\.))+[a-z]{2,6}$

Otras expresiones regulares - Unir sin entrada ^$ - Unir entrada en blanco ^\s\t*$ - Coincidir con la nueva línea [\r\n]|$ - Partido de espacio en blanco ^\s+$ - Partido url = ^http\:\/\/[a-zA-Z0-9.-]+\.[a-zA-Z]{2,3}$

1
  1. E-mail
  2. URL del sitio web
  3. teléfono números
  4. Código postal
  5. alfa numérico, (nombre de usuario consisten en número alfa y solo comienza con el carácter alfabético
  6. Dirección IP
+0

Estos ejemplos demuestran el punto en mi respuesta. Si bien son muy útiles en algunas áreas, serían irrelevantes para mí. No todos los programadores deben preocuparse por el correo electrónico, los números de teléfono, las direcciones IP y los códigos postales. – pavium

+0

Exactamente este fue el punto de mi pregunta. Rara vez necesito usar expresiones regulares mencionadas en estas respuestas. Esperaba respuestas con expresiones regulares más genéricas, como buscar comentarios, buscar cadenas con un conjunto específico de palabras, etc., que los programadores usan sin importar en qué lenguaje de programación o dominio estén trabajando. –

2

Esto es un poco como preguntar '¿cuáles son las palabras más útiles para los programadores?'

Depende de lo que va a utilizar para, y depende en qué idioma. Y no dijiste.

Algunos programadores nunca tienen que preocuparse por la coincidencia de direcciones de correo electrónico, números de teléfono, códigos postales y direcciones IP.

Mi copia de

El dominio de las expresiones regulares, O'Reilly, 3ª edición, 2006

dedica mucho espacio a los sabores de expresiones regulares utilizadas por los diferentes idiomas.

Es una gran referencia, pero la segunda edición me pareció más legible.

1

Esto dependerá completamente del dominio en el que trabaje. Para algunos, serán los números de teléfono y los SSN y otros, direcciones de correo electrónico, direcciones IP y URL. Lo más importante es saber cuándo necesitas una expresión regular y cuándo no.Por ejemplo, si intenta analizar datos de un archivo XML o HTML, generalmente es mejor utilizar una biblioteca específicamente diseñada para analizar ese contenido que intentar escribir algo usted mismo.

5

Tomaría un ángulo diferente en esto y diría que es más útil saber cuándo usar expresiones regulares y cuándo NO usarlas.

Por ejemplo, imagine este problema: "Averiguar si una cadena termina con un carácter en blanco". Una expresión regular podría ser utilizado aquí, pero si usted está usando C#, este código es mucho más rápido:

bool EndsWithWhitespace(string s) 
{ 
    return !string.IsNullOrEmpty(s) && char.IsWhiteSpace(s[s.Length - 1]); 
} 

Las expresiones regulares son de gran alcance, y es importante saber cuando están demasiado poderosa para el problema que estás tratando de resolver

Cuestiones relacionadas