avatar of 发明者量化-小小梦 发明者量化-小小梦
focar em Mensagem privada
4
focar em
1271
Seguidores

Aprenda expressões regulares sistematicamente (I): O básico

Criado em: 2017-03-29 10:52:47, atualizado em: 2020-11-18 12:39:53
comments   2
hits   3010

Aprenda expressões regulares sistematicamente (I): O básico

O que é uma expressão correta? Uma expressão regular é uma combinação de caracteres específicos e predefinidos que compõem um conjunto de regras de seqüência de caracteres para expressar uma lógica de filtragem de seqüência de caracteres.

  • As expressões regulares podem ser usadas para:
  给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
  可以通过正则表达式,从字符串中获取我们想要的特定部分。

Para facilitar a aprendizagem, recomendo o Regextor, um software de verificação de expressões regulares, que pode ser encontrado no meu artigo, que também tem uma lista de bons softwares para Mac.

Aprenda expressões regulares sistematicamente (I): O básico

A seguir, começamos com as regras de expressões regulares:

  • #### Correspondência de caracteres de texto comum

Uma expressão regular pode conter apenas texto comum, representando uma correspondência precisa com este texto. Por exemplo:

A expressão legal é:song O texto é de Xiaosongge. Resultado da comparação: xiaosongge,xiaoSongge As expressões regulares são maiúsculas por padrão, então a song não corresponde a “Song”. No entanto, a maioria das implementações de expressões regulares oferece uma opção para que as minúsculas não sejam maiúsculas.

  

  

  • #### Correspondência de caracteres arbitrários

. é usado para combinar um caracter arbitrário, como:

Expressões regulares: c.t Cat cet caaat dog (em inglês) Resultado da comparação:cat cet caaat dog Análise: c.t corresponde a uma sequência de caracteres que começa com “c” e termina com “t”, com um caracter arbitrário no meio.

Simultaneamente, várias sequências. podem ser combinadas com várias sequências de caracteres arbitrários:

Expressões regulares: c..t Cat cet caat dog - Wikipédia, a enciclopédia livre Resultado da correspondência: cat cet caat dog

  

  

  • #### Combinação de caracteres especiais

. contém um significado especial na expressão regular, é um caracter especial. .\ também é um caracter especial, pode ser usado como tradução para caracteres especiais. Se você quiser corresponder a um verdadeiro “ . ” caracteres, é necessário adicionar \ para tradução de caracteres..O símbolo . “ representa o verdadeiro . “

Expressões regulares: c.t Texto em espera de correspondência: cat c.t dog Resultado da correspondência: catc.t dog Nota: Como \ também é um caracter especial, é necessário usar duas linhas de contraste para que um verdadeiro \ seja correspondido.\:

Expressões regulares: c\t Esperando por uma correspondência de texto: cat c\t dog Resultado da correspondência: catc\t dog

  

  

  • #### Utilização de conjuntos de caracteres

Isso é o que eu disse acima. Eu posso combinar um caractere qualquer, mas se eu quiser combinar alguns caracteres específicos?[E [caracteres meta].

Expressões regulares: c[ab]t Cat cbt cet - Wikipédia, a enciclopédia livre Resultado da comparação:cat cbt cet Análise:[ab] vai corresponder a a ou b. Então c[ab]t combina com “cat” e “cbt” e não com “cet”.

  

  

  • #### Intervalos de grupo de caracteres

No exemplo acima, se eu quisesse fazer uma correspondência entre cet, em[Então, se eu quisesse combinar qualquer letra minúscula, eu escreveria dezenas de letras minúsculas? Isso é bom, mas é muito longo.[a-z]:

Expressões regulares: c[a-z]t Para correspondência: cat cbt czt c2t Resultado da comparação:cat cbt czt c2t Análise: c[a-z]t representa uma letra arbitrária das letras “a” - “z” que começa com “c” e termina com “t”.

Outras faixas semelhantes:

[0-9] e[A função é a mesma que 0123456789] . [A-F] corresponde a letras maiúsculas de A a F。 [A-Z] corresponde a todas as letras maiúsculas de A a Z. [a-z] corresponde a todos os caracteres em letras minúsculas de a a z. [A-z] corresponde a todos os caracteres do ASCII A ao ASCII z, não apenas a todos os caracteres, mas também a todos os caracteres da tabela ASCII A ao z, como[E ^ etc) [[A-Za-z0-9] Corresponde a todas as letras e números em minúsculas.

  

  

  • #### Correspondência de não-conjuntos

Os conjuntos de caracteres são geralmente usados para especificar um conjunto de caracteres que precisam ser combinados. Mas, às vezes, você deseja excluir um conjunto de caracteres que você não deseja combinar. Isso pode ser feito pela negação do conjunto de caracteres.

Expressões regulares: c[^a-z]t Texto para correspondência: cat cbt czt c2t cAt Resultado da correspondência: cat cbt cztc2t cAt Análise: Este é o oposto do exemplo anterior.[[a-z] corresponde a todas as letras minúsculas, enquanto [a-z] corresponde a todas as letras minúsculas.[^a-z] Combina todos os caracteres que não são minúsculas。

Observe que o caractere ^ desmatcha todos os caracteres do conjunto de caracteres.

  

  

  • #### Caracteres originais

Os caracteres meta têm um significado especial em expressões regulares, já falamos sobre alguns caracteres meta, como por exemplo.[E] ◦ Estes caracteres não podem expressar o seu significado diretamente, por exemplo, não podem ser usados diretamente[“para se encaixar”.[“Usar. para combinar”.

Todos os caracteres meta podem ser precedidos por uma tradução em linha inversa, que, quando traduzida, corresponde a si mesmo e não ao seu significado especial. Por exemplo,[“Este é o meu primeiro jogo.[ “:

Expressões regulares: a[b Texto a corresponder: a[b ab a[[b Resultado da comparação:a[b ab a[[b Nota: \ é usado como um caracteres meta, o que também significa que \ também é um caracteres meta. Portanto, se for necessário para combinar com o verdadeiro “\”, pode ser usado\:

Expressões regulares: a\b Texto a corresponder: a\b a\b a[[b Resultado da correspondência: a\b a\b a[[b

  

  

  • #### Caracteres em branco

Às vezes, você pode precisar de coincidir com caracteres em branco que não podem ser impressos no texto. Por exemplo, você pode querer encontrar todos os caracteres Tab, ou todos os caracteres de substituição. Você pode usar os caracteres especiais da tabela a seguir:

Aprenda expressões regulares sistematicamente (I): O básico

Por exemplo, \r\n irá corresponder a uma combinação de troca de rotação, representando uma troca de linha de arquivo no Windows. Em sistemas Linux e Unix, apenas é necessário usar \n.

  

  

  • #### Para corresponder a um tipo específico de caracteres

Existem alguns caracteres meta especiais que podem ser usados para combinar conjuntos de caracteres comuns. Estes caracteres meta são chamados de classes de caracteres de correspondência. Você encontrará muito conveniente usá-los.

Número de correspondência ou não Como já foi dito,[0-9] pode ser combinado com todos os números. Se você não quiser combinar nenhum número, você pode usar[A tabela abaixo apresenta uma lista de caracteres de classes numéricas e não numéricas:

Aprenda expressões regulares sistematicamente (I): O básico

Expressões regulares: c\dt Texto para correspondência: cat c2t czt c9t Resultado da correspondência: catc2t czt c9t

Expressões regulares: c\Dt Texto para correspondência: cat c2t czt c9t Resultado da comparação:cat c2t czt c9t Combinar caracteres alfabéticos e não alfabéticos Outro metacaráter de classe comum é \w e \W:

Aprenda expressões regulares sistematicamente (I): O básico

Expressões regulares: c\wt Escreve-se “cat” Resultado da comparação:cat c2t c-t c\t

Expressões regulares: c\Wt Esperando por uma correspondência Resultado da correspondência: cat c2tc-t c\t Combinação de espaços em branco e não em branco A última correspondência que encontramos é uma classe em branco:

Aprenda expressões regulares sistematicamente (I): O básico

Expressões regulares: c\st Esperando por uma correspondência Resultado da correspondência: catc t c2t c\t

Expressões regulares: c\St Esperando por uma correspondência Resultado da comparação:cat c t c2t c\t

  

  

  • #### Combinar um ou mais caracteres

O símbolo + representa a correspondência de um ou mais caracteres. Por exemplo, a corresponde a “a”, e a+ corresponde a uma ou mais “a”.

Expressão formal: cat “CAT CAAT CAAAT” (em inglês) Resultado da correspondência: ctcat caat caaat

Expressão regular: ca+t “CAT CAAT CAAAT” (em inglês) Resultado da correspondência: ctcat caat caaat Quando o + é usado em um conjunto de caracteres, o símbolo + deve ser colocado fora do conjunto:

Expressões regulares: c[0-9]+t Texto a ser correspondido: ct c0t cat c123t Resultado da correspondência: ctc0t cat c123t Análise: c[0-9]+t representa uma sequência de caracteres que começa com “c” e termina com “t”, com um ou mais números no meio.

Claro que sim.[0-9+] também é uma expressão regular legal, mas representa um conjunto de caracteres que contém os símbolos “0” - “9” e “+”.

Em geral, os caracteres meta, como . e +, são usados como significados literais quando usados em conjuntos de caracteres, portanto, não há necessidade de tradução.[0-9+] e[0-9+A função é a mesma.

Nota: + é um caractere meta, e “+” precisa ser traduzido+。

  

  

  • #### Combinação de zero ou mais caracteres

Se você quiser combinar zero ou mais caracteres, você pode usar*Caracteres iniciais

Expressões regulares: ca*t Para correspondência: ct cat caat cbt Resultado da comparação:ct cat caat cbt Perceber:*O símbolo é um caracteres meta. Para poder corresponder a “ * “, é necessário fazer uma tradução.*。

  

  

  • #### Combinação de zeros ou um caractere

Assim, ? é muito apropriado para combinar um caractere selecionado em um texto.

Expressação formal: ca?t Para correspondência: ct cat caat cbt Resultado da comparação:ct cat caat cbt Observação: o símbolo ? é um caractere inicial. Para poder corresponder ao ?, é necessário traduzir.?。

  

  

  • #### Usando o número de correspondências

As expressões regulares permitem especificar o número de vezes que a correspondência deve ser feita. O número de vezes pode ser especificado entre { e } . Nota: { e } também são caracteres maiúsculos, que precisam ser traduzidos quando usados em sentido literal.

Número exato de correspondências Para especificar o número de correspondências, você pode inserir um número entre { e }. Por exemplo, { 3 } irá corresponder a 3 caracteres ou conjuntos anteriores:

Expressão regular: ca{3}t Para correspondência: ct cat caaat cbt Resultado da correspondência: ct catcaaat cbt Número mínimo de correspondências Também podemos especificar apenas o mínimo de correspondência. Por exemplo, {2,} significa correspondência 2 ou mais vezes:

Expressão regular: ca{1,}t Para correspondência: ct cat caaat cbt Resultado da correspondência: ctcat caaat cbt Correspondência entre dimensões Também podemos usar valores mínimos e máximos para determinar o número de correspondências. Por exemplo, {2,3} significa um mínimo de 2 correspondências e um máximo de 3 correspondências.

Expressão regular: ca{2,3}t Para correspondência: ct cat caaat cbt Resultado da correspondência: ct catcaaat cbt Então? e a função de {0,1} é a mesma coisa que a função de {1,}

  

  

  • #### Correspondência sem ganância

Veja os exemplos a seguir:

Expressão regular: s.*g (em inglês) Resultado da comparação: xiao song xiao song Análise: s.*Ao invés de combinar duas “songs” como se esperava, o g combinou todos os textos entre a primeira “s” e a última “g”.

Isso é porque*e + são correspondências gananciosas. Ou seja, as expressões regulares sempre procuram a correspondência maior, e não a menor, o que é intencional.

Mas se você não quer uma correspondência gananciosa, use a correspondência não gananciosa das palavras-chave (matar o mínimo possível de caracteres). A palavra não gananciosa é adicionada depois da palavra-chave?:

Aprenda expressões regulares sistematicamente (I): O básico

*Sim? Não.*A versão não-comprometida, portanto, pode ser usada.*Para modificar o exemplo acima:

Expressão regular: s.?g (em inglês) Resultado da comparação: xiaosong xiao song Análise: pode-se ver s.?g corresponde a duas “canções” 。

  

  

  • #### Defina a borda da string

Os caracteres meta que correspondem aos limites das strings são ^ e $, usados no início e no fim da string respectivamente.

↑ Usado da seguinte forma:

Expresso regular: ^ xiao

(em inglês) Resultado da comparação:xiaosong

O texto foi publicado no blog oficial da empresa, a “Axiaosong”. Resultados da comparação: axiaosong Análise: ^xiao corresponde a uma sequência de caracteres que começa com “xiao”.

$ é usado da seguinte forma:

Expressão legal: song$

(em inglês) Resultado da comparação: xiaosong

(em inglês) Resultado da comparação: xiaoosonga Análise: song$ corresponde a uma sequência de caracteres que termina em “song”

Compartilhamento:

Expressão regular: ^[0-9a-zA-Z]{4,}$

Texto a corresponder: a1b234ABC Resultado da comparação:a1b234ABC

Texto a corresponder: + a1b23=4ABC Resultado depois de combinar: + a1b23=4ABC Análise:[0-9a-zA-Z]{4,}$ correspondem a uma sequência de números ou letras, e o número de dígitos é maior que ou igual a quatro dígitos。

Nota: ^ se estiver no início do conjunto, significa negativo; se estiver fora do conjunto, corresponde à posição inicial da string.[^0-9] e ^[Diferenças entre 0-9]

  

  

  • #### Utilização do modo multi-linhas

No entanto, pode-se usar o modo multilineo. No modo multilineo, o motor de expressões regulares usa o trocador de linha como separador da string. ^ corresponde ao início do texto ou ao início de uma linha, enquanto $ corresponde ao fim do texto ou ao fim de uma linha.

Modifique o exemplo anterior:

A expressão regular é:[0-9a-zA-Z]{4,}$

Texto a corresponder: a1b234ABC +a1b23=4ABC ABC123456

Resultado da comparação:a1b234ABC +a1b23=4ABC ABC123456 Análise:[0-9a-zA-Z]{4,}$ vai para correspondência de cada linha com números ou letras, e o número de dígitos é maior do que igual a quatro dígitos.

Observação: Se for usado o modo de múltiplas linhas, o ponto m deve ser colocado no início da expressão regular. (?m) não é suportado na maioria das implementações de expressões regulares. Algumas implementações de expressões regulares também suportam o uso do início de uma string correspondente a A e o fim de uma string correspondente a Z. Se for suportado, o função desses caracteres é a mesma que a de ^, $.

Este artigo fala sobre as bases, e depois você pode ver o próximo artigo sobre como aprender sistematicamente as expressões regulares ((b): artigo progressivo 。

Traduzido do japonês por iOS_小松哥