Visual Basic Scripting Edition  

Cuantificadores

En algunas ocasiones no se conoce el número de caracteres que deben coincidir. Para solucionar este tipo de problema, las expresiones regulares admiten el concepto de cuantificadores. Estos cuantificadores permiten especificar el número de veces que un componente dado de la expresión regular debe aparecer para que la coincidencia sea verdadera.

La tabla siguiente muestra los distintos cuantificadores y su significado.

Carácter Descripción
* Coincide con la subexpresión precedente cero o más veces. Por ejemplo, 'zo*' coincide con "z" y "zoo". * es equivalente a {0,}.
+ Coincide con la subexpresión precedente una o más veces. Por ejemplo, 'zo+' coincide con "zo" y "zoo", pero no con "z". + es equivalente a {1,}.
? Coincide con la subexpresión precedente cero o una vez. Por ejemplo, 'da(do)?' coincide con "da" en "da" o en "dado". ? es equivalente a {0,1}
{n} n es un entero no negativo. Coincide exactamente n veces. Por ejemplo, 'o{2}' no coincide con 'o' en "doy", pero coincide con las dos oes en "cooperar".
{n,} n es un entero no negativo. Coincide al menos n veces. Por ejemplo, 'o{2,}' no coincide con 'o' en "doy" pero coincide con todas las oes en "goooool". 'o{1,}' es equivalente a 'o+'. 'o{0,}' es equivalente a 'o*'.
{n,m} m y n son enteros no negativos, donde n <= m. Coincide al menos n veces y m como máximo. Por ejemplo, 'o{1,3}' coincide con las tres primeras oes en "gooooool". 'o{0,1}' es equivalente a 'o?'. Tenga en cuenta que no puede poner un espacio entre la coma y los números.

En documentos de gran tamaño, podría haber fácilmente más de nueve capítulos, por lo que se necesita un sistema para tratar números de capítulo de dos o tres dígitos. Los cuantificadores le permitirán hacerlo. La siguiente expresión regular de JScript coincide con encabezados de capítulo con cualquier número de dígitos:

/Capítulo [1-9][0-9]*/

La siguiente expresión regular de VBScript busca la coincidencia de manera idéntica:

"Capítulo [1-9][0-9]*"

Observe que el cuantificador aparece después de la expresión de intervalo. Por lo tanto, se aplica a toda la expresión de intervalo que, en este caso, sólo especifica dígitos del 0 al 9, inclusive.

El cuantificador '+' no se usa en este caso, ya que no es necesario que haya un dígito en las posiciones segunda o siguiente. El carácter '?' tampoco se utiliza, ya que limita los números de capítulo a sólo dos dígitos. Al menos debe coincidir un dígito después de 'Capítulo' y un carácter de espacio.

Si sabe que el número de capítulos está limitado a 99 únicamente, puede utilizar la siguiente expresión de JScript para especificar al menos un dígito, pero no más de dos.

/Capítulo [0-9]{1,2}/

En VBScript, use la siguiente expresión regular:

"Capítulo [0-9]{1,2}"

La desventaja de la expresión anterior es que, en el caso de que exista un número de capítulo mayor que 99, continuará coincidiendo con los dos primeros dígitos. Otra desventaja es que si alguien creara un Capítulo 0, éste coincidiría. A continuación se muestran expresiones de JScript más adecuadas para que sólo coincidan dos dígitos:

/Capítulo [1-9][0-9]?/

o

/Capítulo [1-9][0-9]{0,1}/

En VBScript, use las expresiones equivalentes que se muestran a continuación:

"Capítulo [1-9][0-9]?"

o

"Capítulo [1-9][0-9]{0,1}"

Los cuantificadores '*', '+' y '?' se denominan expansivos, es decir, coinciden con la mayor cantidad de texto posible. En algunas ocasiones no es aconsejable que esto ocurra. A veces es preferible obtener una coincidencia mínima.

Supongamos, por ejemplo, que busca en un documento HTML la aparición de un título de capítulo encerrado en una etiqueta H1. El texto aparece en el documento como:

<H1>Capítulo1 - Introducción a las expresiones regulares</H1>

La siguiente expresión coincide con todos los elementos comprendidos entre el símbolo menor que (<) de apertura y el símbolo mayor que (>) del final de la etiqueta H1 de cierre.

/<.*>/

La expresión regular equivalente de VBScript es:

"<.*>"

Si sólo deseaba una coincidencia con la etiqueta H1 de apertura, utilice la siguiente expresión no expansiva:

/<.*?>/

o

"<.*?>"

Al colocar el signo '?' después de un cuantificador '*', '+' o '?', la expresión se transforma de coincidencia expansiva a no expansiva, o mínima.

Ayuda de Javascript y Vbscript para Javascripts.astalaweb.com.