Aprender expressões regulares de forma sistemática:

Autora:Sonhos pequenos, Criado: 2017-03-29 10:52:47, Atualizado: 2020-11-18 12:39:53

Aprender expressões regulares de forma sistemática:

O que é uma expressão regular? A expressão normal é uma combinação de caracteres específicos pré-definidos que formam um conjunto de regras de string que são usadas para expressar uma lógica de filtragem de strings.

  • A expressão regular pode ser usada para:

    给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
    可以通过正则表达式,从字符串中获取我们想要的特定部分。
    

    Para facilitar a aprendizagem, recomendo o Regextor, um software de verificação de expressões normais, que pode ser consultado neste artigo, que também recomenda muitos bons softwares para Mac.

    img

A partir daí, começa a explicar as regras de uma expressão regular:

  • Compare os caracteres de texto comum

    A expressão normal pode conter apenas texto comum, representando um correspondente exato; por exemplo:

    A expressão normal é:songTextos em espera de correspondência: xiao songge, xiao songge Resultado da correspondência: xiaosongGe, xiao Songge As expressões regulares são escritas de forma maiúscula por padrão, por isso a song não corresponde a Song. Mas a maioria das implementações de expressões regulares oferece uma opção para indicar a não-maiúscula.

  • Compare com qualquer caracteres

    . Usado para corresponder a um caracter arbitrário, por exemplo:

    A expressão normal: c.t. Texto para correspondência: cat cet caaat dog Os resultados após a correspondência:cat cetCaat Dog Análise: c.t é correspondida a uma string que começa com "c" e termina com "t", com o meio como um caracter arbitrário.

    同理,多个连续的.可以匹配多个连续的任意字符:

    A expressão normal: c...t Texto para correspondência: cat cet caat dog Resultado da correspondência: cat cetcaatCão

  • Compare caracteres especiais

    . contém um significado especial na expressão regular e é um caractere especial..\ também é um caractere especial, que pode desempenhar um papel de tradução em caracteres especiais.....................................................................................................................................................................................................................

    A expressão normal: c.t. Esperando correspondência: cat c.t dog Resultado da correspondência: catc.tCão Nota: Como \ também é um caractere especial, para corresponder a um caractere "\" real, é necessário usar dois contra-silencos \:

    A expressão normal: c\t Textos em espera de correspondência: cat c\t dog Resultado da correspondência: catc\tCão

  • Usar conjuntos de caracteres

    Como dito acima. Pode-se combinar um caracteres arbitrário, mas e se eu quiser combinar vários caracteres específicos? Para combinar um conjunto específico de caracteres, pode-se usar [e] metacaracteres.

    A expressão normal é: c[ab]t Esperando correspondência Os resultados após a correspondência:cat cbtcet Análise: [ab] corresponde a "a ou a b . Assim, c[ab]t corresponde a cat e cbt , mas não a cet".

  • Usar intervalos de grupos de caracteres

    No exemplo acima, e se eu quiser combinar cet e adicionar um em [?], então se eu quiser combinar letras minúsculas arbitrárias, eu escrevo dezenas?

    A expressão normal é: c[a-z]t Textos para correspondência: cat cbt czt c2t Os resultados após a correspondência:cat cbt cztc2t Análise: c[a-z]t indica que começa com "c , termina com "t ", e no meio a letra "a" - qualquer letra de "z".

    O blog também tem um espaço similar:

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

  • Combinação de não-conjuntos de caracteres

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

    A expressão normal é: c[^a-z]t Textos para correspondência: cat cbt czt c2t cAt Resultado da correspondência: cat cbt cztc2t cAtAnálise: Este é o contrário do exemplo anterior. ▲[a-z] corresponde a todos os caracteres em minúscula, enquanto [^a-z] corresponde a todos os caracteres não em minúscula. ▲

    Observe que o caracter ^ é um desmatamento de todos os caracteres do conjunto de caracteres.

  • Caracteres

    Os caracteres de base têm significados especiais na expressão regular, onde já dissemos alguns caracteres de base, como., [e]. Estes caracteres não podem expressar diretamente o seu significado, por exemplo, não podem ser usados diretamente [para combinar " [, use. para combinar " ).

    Todos os meta-caracteres podem ser precedidos por uma inversão de tração, quando a inversão é feita, o caractere irá corresponder a si mesmo e não ao seu significado especial. Por exemplo, [ vai corresponder a " [ ":

    A expressão normal é: a[b] Textos em espera de correspondência: a[b ab a[[b Os resultados após a correspondência:a[bAb a [[b]] Observação: \ é usado para transformar caracteres meta, o que também significa \ também é um meta caráter. Por isso, se você precisa combinar um verdadeiro \, pode usar \:

    A expressão normal: a\b Texto a ser correspondido: a\b a\b a[[b Resultado após correspondência: a\ba\ba[[b

  • Caracteres em branco

    Às vezes, você pode precisar de corresponder a caracteres em branco que não podem ser impressos no texto. Por exemplo, você deseja encontrar todos os caracteres de Tab ou todos os caracteres de substituição.

    img

    Por exemplo, \r\n irá corresponder a uma combinação de trocas de linhas de volta, representando uma mudança de linha de arquivo no Windows. No Linux e Unix, basta usar \n.

  • Para corresponder a tipos de caracteres específicos

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

    Combinação numérica ou não numérica Como mencionado acima,[0-9] pode ser combinado com todos os números. Se você não quiser combinar com nenhum número, você pode usar [^0-9].

    img

    A expressão normal: c\dt Textos em espera de correspondência: cat c2t czt c9t Resultado da correspondência: catc2tcztc9t

    A expressão normal é: c\Dt Textos para correspondência: cat c2t czt c9t Os resultados após a correspondência:catc2tcztc9t Compare caracteres alfanuméricos e não alfanuméricos Outro caracteres de classe que são usados são \w e \W:

    img

    A expressão normal é: c\wt Textos em espera de correspondência: cat c2t czt c-t c\t Os resultados após a correspondência:cat c2tNão, não.

    A expressão normal é: c\Wt Textos em espera de correspondência: cat c2t c-t c\t Resultado da correspondência: cat c2tc-t c\tCompare espaços e não espaços A última classe de correspondência a ser encontrada é a classe em branco:

    img

    A expressão normal: c\st Textos em espera de correspondência: cat c t c2t c \ t Resultado da correspondência: catc tC2t c\ t

    A expressão normal é: c\St Textos em espera de correspondência: cat c t c2t c \ t Os resultados após a correspondência:catc tc2t c\t

  • Para combinar um ou mais caracteres

    Os caracteres + indicam a correspondência de um ou mais caracteres. Por exemplo, a irá corresponder a "a", e a + irá corresponder a um ou mais "a".

    A expressão normal é: cat Texto em espera de correspondência: ct cat caat caaat Resultado de correspondência: ctcatCaat Caat

    A expressão normal: ca + t Textos em espera de correspondência: ct cat caat caaat Resultado de correspondência: ctcat caat caaatQuando o + é usado em um conjunto de caracteres, é necessário colocar o símbolo + fora do conjunto:

    A expressão normal é: c[0-9] + t Textos em espera de correspondência: ct c0t cat c123t Resultado de correspondência: ctc0tgatoc123tAnálise: c[0-9]+t representa uma cadeia de caracteres que começa com "c" e termina com "t", com um ou mais números no meio.

    Claro, [0-9+] também é uma expressão regular válida, mas representa um conjunto de caracteres que contém os símbolos "0" - "9" e "+".

    Em geral, meta-caracteres como. e + são usados como significados literais quando são usados em conjuntos de caracteres, portanto não é necessário traduzi-los. Mas não há problema em traduzi-los, então, [0-9+] e [0-9+] funcionam da mesma forma.

    Nota: + é um metacaracter, correspondendo a "+" requer o uso de uma tradução +。

  • Compare zero ou mais caracteres

    Se você quiser combinar zero ou mais caracteres, use o * meta caráter.

    A expressão normal: ca*t Textos em espera de correspondência: ct cat caat cbt Os resultados após a correspondência:ct cat caatcbt Observação: * O símbolo é um metacaracter.

  • Para corresponder a um zero ou um caracter.

    ? pode corresponder a zero ou a um caracteres.

    A expressão normal é: ca?t Textos em espera de correspondência: ct cat caat cbt Os resultados após a correspondência:ct catCaat cbt Nota:? símbolos são meta-caracteres.? para ser capaz de combinar "? ", é necessário fazer a transformação?.

  • Usar o número de correspondências

    A expressão normal permite especificar o número de vezes em que a correspondência ocorre. O número pode ser especificado entre os eixos { e } . Nota: { e } também são meta-caracteres, que precisam ser traduzidos quando se usa um significado literal.

    Número exato de correspondências Para especificar o número de vezes que você deve corresponder, você pode inserir um número entre { e }; por exemplo, {3} irá corresponder aos caracteres ou conjuntos que aparecem 3 vezes antes:

    A expressão normal: ca{3}t Textos em espera de correspondência: ct cat caaat cbt Resultado da correspondência: ct catcaaatcbt Pelo menos o número de vezes Também podemos especificar apenas o valor mínimo para a correspondência. Por exemplo, {2,} significa correspondência 2 ou mais vezes:

    A expressão normal é: ca{1,}t Textos em espera de correspondência: ct cat caaat cbt Resultado de correspondência: ctcat caaatcbt Compatibilidade entre intervalos decimais Também podemos usar o valor mínimo e o valor máximo para determinar o número de correspondências. Por exemplo, {2,3} significa correspondência mínima de 2 vezes e máxima de 3 vezes.

    A expressão normal é: ca{2,3}t Textos em espera de correspondência: ct cat caaat cbt Resultado da correspondência: ct catcaaatcbt Então? e a função de {0,1} é a mesma + e a função de {1,} é a mesma.

  • Compatibilidade sem ganância

    A primeira coisa a fazer é ver os seguintes exemplos:

    A expressão normal é: s.*g Esperando correspondência Resultado da correspondência: xiao song xiao song Análise: o s.*g não corresponde aos dois "songs" como previsto, mas corresponde a todo o texto entre o primeiro "s" e o último "g".

    Isso ocorre porque * e + são correspondências gananciosas. Isto é, as expressões regulares sempre buscam a maior correspondência, e não a menor, o que é deliberadamente projetado.

    Mas se você não quer uma correspondência gananciosa, use a correspondência não gananciosa dessas palavras-chave (coincidir com o menor número possível de caracteres). A palavra não gananciosa é adicionada após a palavra-chave:

    img

    Sim?A versão não gananciosa da versão original do Google Maps, então você pode usar *? para modificar o exemplo acima:

    正则表达式:s.G? Esperando correspondência Resultado da correspondência: xiaosongxiaosong 分析:可以看到s.? g corresponde a duas "songs".

  • Defina a fronteira da string

    Os meta-caracteres que correspondem à fronteira da cadeia são ^ e $, respectivamente, para o início e o fim da cadeia.

    ↑ Utiliza-se como segue:

    A expressão normal: ^ xiao

    Acompanhamento de texto:xiaosong Os resultados após a correspondência:xiaocanção

    Axiosong (em inglês) Resultado da correspondência: axiaosong Análise: ^ xiao corresponde a uma cadeia de caracteres que começa com "xiao".

    $ é usado da seguinte forma:

    A expressão normal é: song$

    O texto está em espera de correspondência. Resultado da correspondência: xiaosong

    Textos em espera de correspondência:xiaosonga Resultado da correspondência: Xiaosonga Análise: song$ corresponde a uma cadeia terminada com "song".

    Compartilhamento:

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

    Textos em espera de correspondência: a1b234ABC Os resultados após a correspondência:a1b234ABC

    Textos para corresponder: + a1b23 = 4ABC Resultado de correspondência: + a1b23 = 4ABC Análise: ^ [0-9a-zA-Z] {4,} $ é composto por números ou letras correspondentes, e tem um número de dígitos maior que a cadeia de quatro dígitos.

    Observação: ^ se estiver no início do conjunto, significa negativo; se estiver fora do conjunto, corresponde ao início da cadeia.

  • Usar padrões multilíneos

    No entanto, o modo multi-linha pode ser ativado. No modo multi-linha, o motor de expressões regulares usa o símbolo de troca de linhas como separador da cadeia de caracteres, o ^ corresponde ao início do texto ou ao início de uma linha, e o $ corresponde ao final do texto ou ao final de uma linha.

    A partir de agora, a maioria dos usuários da rede social não pode usar o aplicativo.

    A expressão normal é: ((?m) ^ [0-9a-zA-Z]{4,}$

    Textos em espera de correspondência: a1b234ABC + a1b23 = 4ABC ABC123456

    Os resultados após a correspondência:a1b234ABC+a1b23=4ABCABC123456Análise: ((?m) ^ [0-9a-zA-Z]{4,} $ irá combinar cada linha com um número ou letra e um número maior que a cadeia de quatro dígitos.

    Observação: Se o padrão de várias linhas for usado, a m deve ser colocada 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 de \A para o início de uma cadeia de caracteres e \Z para o fim de uma cadeia de caracteres. Se suportadas, essas metacaratras têm a mesma função que ^, $.

A partir deste artigo, você pode ler o seguinte artigo sobre aprender expressões regulares sistematicamente:

Traduzido do livro iOS_Chiso Sango


Mais.