A veces no sé cuántos personajes coincidir. Para poder adaptarse a esta incertidumbre, las expresiones regulares respaldan el concepto de clasificatorios. Estos clasificatorios pueden especificar cuántas veces debe aparecer un componente dado de una expresión regular antes de que se pueda cumplir la coincidencia.
La siguiente tabla da una explicación de los diversos calificadores y sus significados:
personaje | describir |
---|---|
* | Coincide con la subexpresión anterior cero o varias veces. Por ejemplo, Zo* puede coincidir con Z y Zoo. * es equivalente a {0,}. |
+ + | Coincide con la subexpresión anterior una o más veces. Por ejemplo, 'Zo+' puede igualar Zo y Zoo, pero no Z. + es equivalente a {1,}. |
? | Coincide con la subexpresión anterior cero o una vez. Por ejemplo, ¿(es)? ? |
{ n } | N es un entero no negativo. Haga coincidir las n veces que se determinan. Por ejemplo, 'O {2}' no puede igualar 'o' en Bob, pero puede igualar dos OS en alimentos. |
{ n ,} | N es un entero no negativo. Coincidir al menos n veces. Por ejemplo, 'o {2,}' no se puede coincidir con 'o' en Bob, pero puede igualar todo el sistema operativo en foooood. 'O {1,}' es equivalente a 'O+'. 'O {0,}' es equivalente a 'o*'. |
{ n , m } | Ambos M y N son enteros no negativos, donde n <= m . Coincidir al menos n veces y coincidir con M veces. Liu, o {1,3} coincidirá con los tres primeros sistema operativo en Fooooood. 'O {0,1}' es equivalente a 'O?'. Tenga en cuenta que no puede haber espacios entre comas y dos números. |
Para un documento de entrada grande, el número de capítulos puede superar fácilmente nueve capítulos, por lo que hay una forma de lidiar con números de capítulos de dos dígitos o tres dígitos. El calificador proporciona esta función. La siguiente expresión regular de JScript puede coincidir con el título del capítulo con cualquier número de bits:
/Chapter [1-9][0-9]*/
La siguiente expresión regular de VBScript realiza la misma coincidencia:
Chapter [1-9][0-9]*
Tenga en cuenta que los calificadores aparecen después de la expresión de rango. Por lo tanto, se aplicará a toda la expresión de rango contenida, en este caso solo se especifican los números de 0 a 9.
El calificador '+' no se usa aquí, porque un número no se requiere necesariamente en la segunda posición o posterior. También no se usa el personaje, ya que esto limitará el número de capítulos a solo dos dígitos. Al menos un número debe coincidir después del 'capítulo' y los caracteres espaciales.
Si se sabe que el límite del capítulo es de 99 capítulos, puede usar la siguiente expresión de JScript para especificar al menos un número, pero no más de dos números.
/Chapter [0-9]{1,2}/
Para VBScript, se pueden usar las siguientes expresiones regulares:
Chapter [0-9]{1,2}
La desventaja de la expresión anterior es que si hay un número de capítulo mayor que 99, solo coincidirá con los primeros dos dígitos. Otro inconveniente es que algunas personas pueden crear un capítulo 0 y aún coincidir. Una mejor expresión de JScript para que coincida con un número de dos dígitos es el siguiente:
/Chapter [1-9][0-9]?/
o
/Chapter [1-9][0-9]{0,1}/
Para VBScript, la siguiente expresión es equivalente a lo anterior:
Chapter [1-9][0-9]?
o
Chapter [1-9][0-9]{0,1}
Los ' *
' , ' +'
y ' ?'
A veces esto no es lo que quieres pasar en absoluto. A veces resulta ser el partido más pequeño.
Por ejemplo, es posible que desee buscar un documento HTML para encontrar un título de capítulo que se incluya en la etiqueta H1. En un documento, el texto puede tener el siguiente formulario:
<H1>Chapter 1 – Introduction to Regular Expressions</H1>
La siguiente expresión coincide con todo, desde el principio menos que el signo (<) hasta el final del marcador H1.
/<.*>/
La expresión regular de VBScript es:
<.*>
Si lo que se combinará es la etiqueta H1 inicial, las siguientes expresiones no greedias solo coinciden <h1>.
/<.*?>/
o
<.*?>
Al colocar '?'
Hasta ahora, los ejemplos vistos solo consideran encontrar títulos de capítulos que aparecen en cualquier lugar. Cualquier cadena 'capítulo' que aparezca seguida de un espacio y un número puede ser un título de capítulo real o una referencia cruzada a otros capítulos. Dado que el título real del capítulo siempre aparece al comienzo de una línea, es necesario diseñar un método para buscar solo el título y no la referencia cruzada.
Los localizadores proporcionan esta función. Un localizador puede arreglar una expresión regular al principio o al final de una línea. También puede crear expresiones regulares que aparecen solo dentro de las palabras o solo al principio o al final de una palabra. La siguiente tabla contiene una lista de expresiones regulares y sus significados:
personaje | describir |
---|---|
^ | Coincide con la posición de inicio de la cadena de entrada. Si se establece la propiedad multilínea del objeto regexp , ^ también coincide con la posición después de '/n' o '/r'. |
$ | Coincide con la posición final de la cadena de entrada. Si se establece la propiedad multilínea del objeto REGEXP , $ también coincide con la posición anterior '/n' o '/r'. |
/b | Haga coincidir un límite de palabra, lo que significa la posición entre la palabra y el espacio. |
/B | Coincidir con los límites que no son de palabras. |
Los calificadores no se pueden utilizar para los localizadores. Dado que no habrá posiciones consecutivas antes o después de una nueva línea o límite de palabras, no se permiten expresiones como '^*'.
Para que coincida con el texto al comienzo de una línea de texto, use el carácter '^' al comienzo de la expresión regular. No confunda esta sintaxis de '^' con su sintaxis entre las expresiones paréntesis. Su sintaxis es fundamentalmente diferente.
Para que coincida con el texto al final de una línea de texto, use el carácter '$' al final de la expresión regular.
Para usar un localizador cuando busque títulos de capítulos, la siguiente expresión regular de JScript coincidirá con un título de capítulo con hasta dos números al comienzo de una línea:
/^Chapter [1-9][0-9]{0,1}/
Las expresiones regulares para la misma función en VBScript son las siguientes:
^Chapter [1-9][0-9]{0,1}
Un título de capítulo real no solo aparece al comienzo de una línea, sino que también solo tiene este contenido en esta línea, por lo que también debe estar al final de una línea. La siguiente expresión asegura que la coincidencia especificada solo coincida con el capítulo y no coincida con las referencias cruzadas. Se logra creando una expresión regular que coincida solo con las posiciones iniciales y finales de una línea de literal.
/^Chapter [1-9][0-9]{0,1}$/
Para VBScript, use:
^Chapter [1-9][0-9]{0,1}___FCKpd___16quot;
Los límites de las palabras coincidentes son ligeramente diferentes, pero agrega una función muy importante a las expresiones regulares. El límite de la palabra es la posición entre la palabra y el espacio. Los límites que no son de palabras están en cualquier otro lugar. La siguiente expresión de JScript coincidirá con los primeros tres caracteres de la palabra 'capítulo' porque aparecen después del límite de la palabra:
//bCha/
Para VBScript:
/bCha
La posición del operador '/B' es crítica aquí. Si está al comienzo de la cadena para que coincida, se busca una coincidencia al comienzo de la palabra; Por ejemplo, la siguiente expresión coincidirá con 'ter' en la palabra 'capítulo' porque aparece antes del límite de la palabra:
/ter/b/
así como
ter/b
La siguiente expresión coincidirá con 'apt' porque está en el medio del 'capítulo', pero no coincidirá con 'apt' en 'aptitude':
//Bapt/
así como
/Bapt
Esto se debe a que 'apt' aparece en la posición límite de no palabras en la palabra 'capítulo' y en la palabra 'aptitud'. La posición de los operadores de límites que no son de palabras no es importante porque la coincidencia no tiene nada que ver con el principio o el final de una palabra.