Às vezes não sei quantos personagens combinam. Para poder se adaptar a essa incerteza, expressões regulares apóiam o conceito de qualificadores. Esses qualificadores podem especificar quantas vezes um determinado componente de uma expressão regular deve aparecer antes que a correspondência possa ser atendida.
A tabela a seguir fornece uma explicação dos vários qualificadores e seus significados:
personagem | descrever |
---|---|
* | Corresponde à subexpressão anterior zero ou várias vezes. Por exemplo, Zo* pode corresponder Z e Zoo. * é equivalente a {0,}. |
+ | Corresponde à subexpressão anterior uma vez ou mais vezes. Por exemplo, 'Zo+' pode combinar com zo e zoológico, mas não z. + é equivalente a {1,}. |
? | Corresponde à subexpressão anterior zero ou uma vez. Por exemplo, faça (es)? ? |
{ n } | n é um número inteiro não negativo. Combine as N vezes que são determinadas. Por exemplo, 'o {2}' não pode corresponder 'O' em Bob, mas pode combinar dois sistemas operacionais em comida. |
{ n ,} | n é um número inteiro não negativo. Combine pelo menos n vezes. Por exemplo, 'O {2,}' não pode corresponder 'o' em Bob, mas pode corresponder a todos os sistemas operacionais em Foooood. 'O {1,}' é equivalente a 'O+'. 'O {0,}' é equivalente a 'O*'. |
{ n , m } | M e N são números inteiros não negativos, onde n <= m . Combine pelo menos n vezes e corresponda a M vezes. Liu, O {1,3} corresponderá aos três primeiros sistemas operacionais em Fooooood. 'O {0,1}' é equivalente a 'O?'. Observe que não pode haver espaços entre vírgulas e dois números. |
Para um grande documento de entrada, o número de capítulos pode exceder facilmente nove capítulos, portanto, há uma maneira de lidar com números de capítulo de dois ou três dígitos. O qualificador fornece essa função. A seguinte expressão regular do JScript pode corresponder ao título do capítulo com qualquer número de bits:
/Chapter [1-9][0-9]*/
A expressão regular do VBScript a seguir executa a mesma correspondência:
Chapter [1-9][0-9]*
Observe que os qualificadores aparecem após a expressão do intervalo. Portanto, será aplicado a toda a expressão de intervalo contida, neste caso, apenas números de 0 a 9 são especificados.
O qualificador '+' não é usado aqui, porque um número não é necessariamente necessário na segunda ou subsequente posição. Também não é usado o personagem, pois isso limitará o número de capítulos a apenas dois dígitos. Pelo menos um número deve ser correspondido após o 'capítulo' e os caracteres espaciais.
Se o limite do capítulo for conhecido por 99 capítulos, você poderá usar a seguinte expressão JScript para especificar pelo menos um número, mas não mais que dois números.
/Chapter [0-9]{1,2}/
Para o VBScript, as seguintes expressões regulares podem ser usadas:
Chapter [0-9]{1,2}
A desvantagem da expressão acima é que, se houver um número de capítulo maior que 99, ele ainda corresponderá apenas aos dois primeiros dígitos. Outra desvantagem é que algumas pessoas podem criar um capítulo 0 e ainda corresponder. Uma melhor expressão do JScript para corresponder a um número de dois dígitos é o seguinte:
/Chapter [1-9][0-9]?/
ou
/Chapter [1-9][0-9]{0,1}/
Para o VBScript, a seguinte expressão é equivalente ao acima:
Chapter [1-9][0-9]?
ou
Chapter [1-9][0-9]{0,1}
O ' *
' , ' +'
e ' ?'
Às vezes, não é isso que você quer que aconteça. Às vezes, por acaso é a menor partida.
Por exemplo, você pode procurar um documento HTML para encontrar um título de capítulo incluído na tag H1. Em um documento, o texto pode ter o seguinte formulário:
<H1>Chapter 1 – Introduction to Regular Expressions</H1>
A expressão a seguir corresponde a tudo do começo menos que o sinal (<) até o final do marcador H1.
/<.*>/
A expressão regular do VBScript é:
<.*>
Se o que deve ser correspondido é a tag H1 inicial, as seguintes expressões não-graduadas correspondem apenas a <H1>.
/<.*?>/
ou
<.*?>
Ao colocar '?'
Até agora, os exemplos vistos consideram apenas encontrar títulos de capítulos que aparecem em qualquer lugar. Qualquer string 'capítulo' que aparece seguida por um espaço e um número pode ser um título real do capítulo ou uma referência cruzada a outros capítulos. Como o título real do capítulo sempre aparece no início de uma linha, é necessário projetar um método para procurar apenas o título e não a referência cruzada.
Os localizadores fornecem essa função. Um localizador pode corrigir uma expressão regular no início ou no final de uma linha. Você também pode criar expressões regulares que aparecem apenas dentro de palavras ou apenas no início ou no final de uma palavra. A tabela a seguir contém uma lista de expressões regulares e seus significados:
personagem | descrever |
---|---|
^ | Corresponde à posição inicial da sequência de entrada. Se a propriedade multilina do objeto regexp estiver definida, também corresponder à posição após '/n' ou '/r'. |
$ | Corresponde à posição final da sequência de entrada. Se a propriedade multilina do objeto regexp estiver definida, $ também corresponderá à posição antes de '/n' ou '/r'. |
/b | Combine um limite da palavra, o que significa a posição entre a palavra e o espaço. |
/B | Combinar limites não-palavras. |
Os qualificadores não podem ser usados para localizadores. Como não haverá posições consecutivas antes ou depois de um limite de nova linha ou palavra, expressões como '^*' não são permitidas.
Para corresponder ao texto no início de uma linha de texto, use o caractere '^' no início da expressão regular. Não confunda essa sintaxe de '^' com sua sintaxe nas expressões de parênteses. Sua sintaxe é fundamentalmente diferente.
Para corresponder ao texto no final de uma linha de texto, use o caractere '$' no final da expressão regular.
Para usar um localizador ao procurar títulos de capítulos, a seguinte expressão regular do JScript corresponderá a um título de capítulo com até dois números no início de uma linha:
/^Chapter [1-9][0-9]{0,1}/
Expressões regulares para a mesma função no VBScript são as seguintes:
^Chapter [1-9][0-9]{0,1}
Um título real do capítulo não apenas aparece no início de uma linha, mas também tem apenas esse conteúdo nessa linha, por isso também deve estar no final de uma linha. A expressão a seguir garante que a correspondência especificada corresponda apenas ao capítulo e não corresponde às referências cruzadas. É alcançado criando uma expressão regular que corresponde apenas às posições iniciais e finais de uma linha de literal.
/^Chapter [1-9][0-9]{0,1}$/
Para VBScript, use:
^Chapter [1-9][0-9]{0,1}___FCKpd___16quot;
Os limites das palavras correspondentes são um pouco diferentes, mas acrescenta uma função muito importante às expressões regulares. A palavra limite é a posição entre a palavra e o espaço. Os limites não-palavras estão em qualquer outro lugar. A expressão do JScript a seguir corresponderá aos três primeiros caracteres da palavra 'capítulo' porque eles aparecem após a palavra limite:
//bCha/
Para VBScript:
/bCha
A posição do operador '/B' é crítica aqui. Se estiver no início da string, uma correspondência no início da palavra é procurada; Por exemplo, a seguinte expressão corresponderá a 'ter' no capítulo da palavra '' porque aparece antes do limite da palavra:
/ter/b/
assim como
ter/b
A expressão a seguir corresponderá a 'apt' porque está no meio do 'capítulo', mas não combinará 'apt' em 'aptidão':
//Bapt/
assim como
/Bapt
Isso ocorre porque 'apt' aparece na posição de limite não-palavras na palavra 'capítulo' e na palavra 'aptidão'. A posição dos operadores de limite não-palavras não é importante porque a correspondência não tem nada a ver com o início ou o fim de uma palavra.