Las expresiones regulares (Expresión regular) proporcionan un método eficiente y conveniente para la coincidencia de patrones de cadenas. Casi todos los lenguajes de alto nivel brindan soporte para expresiones regulares o proporcionan bibliotecas de códigos listas para usar para llamar. Este artículo toma como ejemplo tareas de procesamiento comunes en el entorno ASP para presentar las habilidades de aplicación de expresiones regulares.
1. Verifique el formato de las contraseñas y las direcciones de correo electrónico.
Nuestro primer ejemplo demuestra una función básica de las expresiones regulares: describir de manera abstracta cadenas arbitrariamente complejas. Lo que significa es que las expresiones regulares brindan a los programadores un método formal de descripción de cadenas que puede describir cualquier patrón de cadena encontrado por la aplicación con solo una pequeña cantidad de código. Por ejemplo, para las personas que no se dedican a trabajos técnicos, los requisitos para el formato de la contraseña se pueden describir de la siguiente manera: el primer carácter de la contraseña debe ser una letra, la contraseña debe tener al menos 4 caracteres y no más de 15 caracteres, la contraseña no puede contener más que letras, números y caracteres distintos del guión bajo.
Como programadores, debemos convertir la descripción en lenguaje natural anterior del formato de contraseña a otras formas para que la página ASP pueda entenderla y aplicarla para evitar el ingreso ilegal de contraseñas. La expresión regular que describe este formato de contraseña es: ^[a-zA-Z]w{3,14}$.
En aplicaciones ASP, podemos escribir el proceso de verificación de contraseña como una función reutilizable, como se muestra a continuación:
Función TestPassword(strPassword)
luz tenue
Establecer re = nueva RegExp
re.IgnoreCase = falso
re.global = falso
re.Pattern = "^[a-zA-Z]w{3,14}$"
TestPassword = re.Test(strContraseña)
Función final
A continuación comparamos la expresión regular para verificar el formato de la contraseña con la descripción en lenguaje natural:
el primer carácter de la contraseña debe ser una letra: la descripción de la expresión regular es "^[a-zA-Z]", donde " ^" indica el comienzo de la cadena y el guión le indica a RegExp que coincida con todos los caracteres en el rango especificado.
La contraseña debe tener al menos 4 caracteres y no más de 15 caracteres: la descripción de la expresión regular es "{3,14}".
La contraseña no puede contener caracteres distintos de letras, números y guiones bajos: la descripción de la expresión regular es "w".
Algunas notas: {3, 14} significa que el patrón anterior coincide con al menos 3 pero no más de 14 caracteres (más el primer carácter, se convierte en de 4 a 15 caracteres). Tenga en cuenta que la sintaxis entre llaves es extremadamente estricta y no permite espacios a ningún lado de la coma. Si se agregan espacios, afectará el significado de la expresión regular y provocará errores durante la verificación del formato de la contraseña. Además, el carácter "$" no se agrega al final de la expresión regular anterior. El carácter $ hace que la expresión regular coincida con la cadena hasta el final, lo que garantiza una contraseña válida sin caracteres adicionales a continuación.
De manera similar a la verificación del formato de contraseña, verificar la legitimidad de las direcciones de correo electrónico también es un problema muy común. El uso de expresiones regulares para realizar una verificación simple de la dirección de correo electrónico se puede implementar de la siguiente manera:
<%.
luz tenue
Establecer re = nueva RegExp
re.pattern = "^w+@[a-zA-Z_]+?.[a-zA-Z]{2,3}$"
Respuesta.Escribir re.Test(" [email protected] ")
%>
2. Extraer partes específicas de la página HTML
El principal problema que enfrentamos al extraer contenido de una página HTML es que debemos encontrar una manera de identificar con precisión la parte del contenido que queremos. Por ejemplo, el siguiente es un fragmento de código HTML que muestra titulares de noticias:
<table border="0" width="11%" class="Somestory">
<tr>
<td ancho="100%">
<p align="center">Otro contenido...</td>
</tr>
</mesa>
<table border="0" width="11%" class="Título">
<tr>
<td ancho="100%">
<p align="center">¡Guerra en Irak! </td>
</tr>
</mesa>
<table border="0" width="11%" class="Algunaotrahistoria">
<tr>
<td ancho="100%">
<p align="center">Otro contenido...</td>
</tr>
</table>
Al observar el código anterior, es fácil ver que el título de la noticia se muestra en la tabla en el medio y su atributo de clase está establecido en Titular. Si la página HTML es muy compleja, puede utilizar una función adicional proporcionada por Microsoft IE a partir de 5.0 para ver solo el código HTML de la parte seleccionada de la página. Visite http://www.microsoft.com/Windows/ie. /WebAccess/default.ASP Obtenga más información. Para este ejemplo, asumimos que esta es la única tabla cuyo atributo de clase está establecido en Título. Ahora necesitamos crear una expresión regular, encontrar esta tabla de títulos a través de la expresión regular e incluir esta tabla en nuestra propia página. El primero es escribir código que admita expresiones regulares:
<%
Dim re, strHTML
Set re = new RegExp ' Crea un objeto de expresión regular
re.IgnoreCase = true
re.Global = false 'Finalizar búsqueda después de la primera coincidencia
%>
Ahora considere el área que queremos extraer: aquí, lo que queremos extraer es toda la estructura <table>, incluida la etiqueta de cierre y el texto del título de la noticia. Por lo tanto, el carácter inicial de la búsqueda debe ser la etiqueta de inicio <table>: re.Pattern = "<table.*(?=Headline)". Esta expresión regular coincide con la etiqueta de inicio de la tabla y puede devolver todo lo que se encuentre entre la etiqueta de inicio y el "Título" (excepto las nuevas líneas). Aquí se explica cómo devolver el código HTML coincidente:
'Coloque todos los códigos HTML coincidentes en la colección Matches
Set Matches = re.Execute(strHTML)
'Mostrar todos los códigos HTML coincidentes
Para cada artículo en partidos
Respuesta.Escribir elemento.Valor
Siguiente
'Mostrar uno de los
Response.write Matches.Item(0).Value
ejecuta este código para procesar el fragmento HTML mostrado anteriormente. La expresión regular devuelve el contenido de una coincidencia de la siguiente manera: <table border="0" width="11%" class=". Expresión regular El "(?=Título)" en la expresión no obtiene los caracteres, por lo que no se puede ver el valor del atributo de clase de la tabla. El código para obtener el resto de la tabla también es bastante simple: re.Pattern =. "<table.*(?=Título) (.|n)*?</table>". Entre ellos: "*" después de "(.|n)" coincide con 0 con más caracteres y "? "minimiza el rango de coincidencia "*", es decir, coincide con la menor cantidad de caracteres posible antes de encontrar la siguiente parte de la expresión </table> es la etiqueta final de la tabla.
El limitador "?" la expresión del código devuelto para otras tablas. Por ejemplo, para el fragmento de código HTML proporcionado anteriormente, si elimina este "?", el contenido devuelto será:
<table border="0" width="11%" class=". Titular">
<tr>
<td ancho="100%">
<p align="center">¡Guerra en Irak! </td>
</tr>
</mesa>
<table border="0" width="11%" class="Algunaotrahistoria">
<tr>
<td ancho="100%">
<p align="center">Otro contenido...</td>
</tr>
</mesa>
El contenido devuelto no solo contiene la etiqueta <table> de la tabla Headline, sino también la tabla Someotherstory. Se puede ver que el "?"
Este ejemplo supone algunas premisas bastante idealistas. En aplicaciones reales, la situación suele ser mucho más complicada, especialmente cuando no se tiene influencia en la escritura del código HTML fuente que se utiliza, escribir código ASP es particularmente difícil. El método más eficaz es dedicar más tiempo a analizar el HTML cerca del contenido que se va a extraer y realizar pruebas con frecuencia para asegurarse de que el contenido extraído sea exactamente lo que necesita. Además, debe prestar atención y manejar la situación en la que la expresión regular no puede coincidir con ningún contenido de la página HTML de origen. El contenido puede cambiar muy rápidamente, así que no termine con errores ridículos en su página sólo porque alguien más haya cambiado el formato del contenido.
3. Analizar archivos de datos de texto
Hay muchos formatos y tipos de archivos de datos XML, el texto estructurado e incluso el texto no estructurado a menudo se convierten en fuentes de datos para aplicaciones ASP. Un ejemplo que veremos a continuación es un archivo de texto estructurado que utiliza calificadores. Los calificadores (como las comillas) indican que las partes de la cadena son inseparables, incluso si la cadena contiene delimitadores que separan el registro en campos.
El siguiente es un archivo de texto estructurado simple:
apellido, nombre, número de teléfono, descripción Sun, Wukong, 312 555 5656, ASP es muy bueno, Pig, Bajie, 847 555 5656, soy productor de cine.
Este archivo es muy
.simple La primera línea es el título y las dos líneas siguientes son los registros separados por comas. Analizar este archivo también es muy simple: simplemente divida el archivo en líneas (según los símbolos de nueva línea) y luego divida cada registro según los campos. Sin embargo, si agregamos comas al contenido de un determinado campo:
apellido, nombre, número de teléfono, descripción Sun, Wukong, 312 555 5656, me gustan ASP, VB y SQL.
Pig, Bajie, 847 555 5656, soy productor de películas.
Habrá un problema al analizar el primer registro, porque desde el punto de vista de un analizador que solo reconoce delimitadores de coma, su último campo contiene el contenido de dos campos. Para evitar este tipo de problemas, los campos que contienen delimitadores deben estar rodeados de calificadores. Las comillas simples son un calificador de uso común. Después de agregar el calificador de comillas simples al archivo de texto anterior, su contenido es el siguiente:
apellido, nombre, número de teléfono, descripción Sun, Wukong, 312 555 5656, 'Me gustan ASP, VB y SQL'
Zhu, Bajie, 847 555 5656, 'Soy un productor de cine'
Ahora podemos determinar qué coma es el delimitador y qué coma es el contenido del campo, es decir, solo debemos considerar las comas que aparecen dentro de las comillas como el contenido. del campo. Lo siguiente que tenemos que hacer es implementar un analizador de expresiones regulares que determine cuándo dividir campos según comas y cuándo tratar las comas como contenido de campo.
El problema aquí es ligeramente diferente al que enfrentan la mayoría de las expresiones regulares. Normalmente miramos una pequeña porción de texto para ver si coincide con una expresión regular. Pero aquí, sólo podemos saber de manera confiable qué hay entre comillas después de considerar toda la línea de texto.
A continuación se muestra un ejemplo que ilustra el problema. Extraiga aleatoriamente media línea de contenido de un archivo de texto y obtenga: 1, playa, negro, 21, ', perro, gato, pato, ',. En este ejemplo, debido a que hay otros datos a la izquierda de "1", es extremadamente difícil analizar su contenido. No sabemos cuántas comillas simples preceden a este fragmento de datos, por lo que no podemos determinar qué caracteres están entre comillas (el texto entre comillas no se puede dividir durante el análisis). Si el fragmento de datos está precedido por un número par (o ningún) de comillas simples, entonces "', perro, gato, pato, '" es una cadena entre comillas y es indivisible. Si el número de comillas anteriores es un número impar, entonces "1, playa, negro, 21, '" es el final de una cadena y es indivisible.
Por lo tanto, la expresión regular debe analizar toda la línea de texto, teniendo en cuenta cuántas comillas aparecen para determinar si el carácter está dentro o fuera del par de comillas, es decir:,(?=([^']*'[ ^']*') *(?![^']*')). Esta expresión regular primero encuentra una comilla, luego continúa buscando y garantiza que el número de comillas simples después de la coma sea un número par o cero. Esta expresión regular se basa en el siguiente juicio: si el número de comillas simples después de la coma es par, entonces la coma está fuera de la cadena. La siguiente tabla proporciona instrucciones más detalladas:
, buscando una coma
(?= continúa buscando hacia adelante para coincidir con este patrón:
(Comience un nuevo patrón
[^']*' [caracteres sin comillas] 0 o más, seguido de una comilla
[^']*'[^']*) [caracteres sin comillas] 0 o más, seguido de una comilla. Combinado con el contenido anterior, coincide con pares de comillas.
)* finaliza el patrón y coincide con todo el patrón (pares de comillas) 0 o más veces
(?! Buscar hacia adelante, excluir este patrón
[^']*' [caracteres sin comillas] 0 o más, seguido de una comilla
) Debajo del modo de finalización
hay una función de VBScript, que acepta un parámetro de cadena, divide la cadena de acuerdo con el separador de coma y el calificador de comillas simples en la cadena y devuelve la matriz de resultados:
Función SplitAdv(strInput)
objeto tenueRE
Establecer objRE = nuevo RegExp
'Establecer objeto RegExp
objRE.IgnoreCase = verdadero
objRE.Global = verdadero
objRE.Pattern = ",(?=([^']*'[^']*')*(?![^']*'))"
' El método Reemplazar usa chr(8) para reemplazar lo que queremos para usar coma, chr(8) esb
' carácter, b puede aparecer muy raramente en una cadena.
' Luego dividimos la cadena según b y la guardamos en la matriz
SplitAdv = Dividir(objRE.Replace(strInput, "b"), "b")
Función final
En resumen, el uso de expresiones regulares para analizar archivos de datos de texto tiene las ventajas de una alta eficiencia y acorta el tiempo de desarrollo. Puede ahorrar mucho tiempo al analizar archivos y extraer datos útiles en función de condiciones complejas. En un entorno en rápida evolución donde todavía habrá una gran cantidad de datos tradicionales disponibles, saber cómo construir rutinas eficientes de análisis de datos será una habilidad valiosa.
4. Reemplazo de cadenas
En el último ejemplo, veremos la función de reemplazo de expresiones regulares de VBScript. ASP se utiliza a menudo para formatear dinámicamente texto obtenido de diversas fuentes de datos. Utilizando el poder de las expresiones regulares de VBScript, ASP puede cambiar dinámicamente texto complejo coincidente. Resaltar algunas palabras agregando etiquetas HTML es una aplicación común, como resaltar palabras clave de búsqueda en los resultados de búsqueda.
Para ilustrar cómo se hace esto, veamos un ejemplo que resalta todo ".NET" en una cadena. Esta cadena se puede obtener desde cualquier lugar, como una base de datos u otro sitio web.
<%
Establecer expresión regular = nueva expresión regular
regEx.Global = verdadero
regEx.IgnoreCase = True
'patrón de expresión regular,
'Busque cualquier palabra o URL que termine en ".NET".
regEx.Pattern = "(b[a-zA-Z._]+?.NETb)"
' Cadena utilizada para probar la función de reemplazo
strText = "Microsoft ha creado un nuevo sitio web www.ASP.NET ".
'Llame al método Reemplazar de la expresión regular.
'$1 significa insertar el texto coincidente en la posición actual
Respuesta.Escribir regEx.Replace(strText, _
"<b estilo='color: #000099; tamaño de fuente: 18pt'>$1</b>")
%>
Hay varios puntos importantes que deben tenerse en cuenta en este ejemplo. La expresión regular completa se coloca entre paréntesis y su función es interceptar todo el contenido coincidente para su uso posterior, al que se hace referencia con $1 en el texto de reemplazo. Se pueden utilizar hasta 9 intercepciones similares por sustitución, referenciadas por $1 a $9 respectivamente. El método Reemplazar de las expresiones regulares es diferente de la función Reemplazar del propio VBScript. Solo requiere dos parámetros: el texto que se buscará y el texto que se reemplazará.
En este ejemplo, para resaltar las cadenas ".NET" buscadas, las rodeamos con etiquetas en negrita y otros atributos de estilo. Con esta tecnología de búsqueda y reemplazo, podemos agregar fácilmente la función de resaltar palabras clave de búsqueda al programa de búsqueda de sitios web, o agregar automáticamente enlaces a otras páginas para las palabras clave que aparecen en la página.
Conclusión
Espero que las diversas técnicas de expresión regular presentadas en este artículo le hayan inspirado cuándo y cómo aplicar expresiones regulares. Aunque los ejemplos de este artículo están escritos en VBScript, las expresiones regulares también son útiles en ASP.NET. Es uno de los principales mecanismos para la validación de formularios de control del lado del servidor y se exporta a todo el espacio de nombres .Text.RegularExpressions a través del Sistema. .Espacio de nombres Text.RegularExpressions.