Ferramentas de texto e do dia a dia · Kit de ferramentas de texto
Literal ou regex? Por que um ponto no seu termo de pesquisa pode alterar todos os resultados
· Por que é importante
localizar e substituir expressões regulares edição de texto
Explica quais caracteres carregam significado em expressões regulares, o que dá errado quando 'a.b' ou 'v1.2 (beta)' é tratado como um padrão e por que um modo literal que escapa de tudo deve ser o padrão.
Procurando por 'v1.2' e combinando 'v102' - como uma ferramenta regex silenciosamente transforma pontuação em curingas
Um agente de suporte que altera `v1.2` nas notas de lançamento pode razoavelmente esperar que esses quatro caracteres identifiquem um rótulo de versão. Com Regex ativado, entretanto, o ponto significa qualquer caractere, exceto uma quebra de linha. O padrão pode, portanto, corresponder a `v102`, `v1-2` ou `v1x2`, e Substituir tudo pode alterar entradas que nunca fizeram parte da liberação solicitada.
Essa falha é silenciosa porque o padrão é válido. Não há mensagem de erro para distinguir um curinga deliberado de pontuação copiada de um nome de arquivo. O primeiro aviso pode ser uma contagem de substituições inesperadamente grande. Quando a tarefa é substituir exatamente o texto conhecido, a pontuação deve ser um dado, não uma instrução para o mecanismo de busca.
Os metacaracteres - ponto, colchetes, parênteses, mais, estrela, ponto de interrogação, barra vertical, cursor, dólar e barra invertida, e o que cada um faz
No modo JavaScript regex, um ponto é um curinga; colchetes definem uma classe de caracteres; parênteses criam um grupo; além disso, repetição de controle de estrela e ponto de interrogação; e um cachimbo oferece alternativas. Um sinal de circunflexo e um cifrão ancoram o padrão no início ou no final de todo o texto nesta ferramenta, porque o modo multilinha não está habilitado.
Uma barra invertida altera a forma como o caractere seguinte é lido e os colchetes podem expressar contagens de repetições. Esses símbolos são importantes apenas em posições onde a gramática regex os trata de maneira especial, portanto, memorizar uma lista é menos confiável do que decidir de qual modo o trabalho precisa. Se você estiver combinando um rótulo, fragmento de caminho ou nome de arquivo fornecido, comece literalmente.
Os metacaracteres importantes no modo JavaScript regex
O modo literal faz com que a pesquisa signifique o que foi digitado. ToolAcre escapa metacaracteres de expressão regular antes de compilar a pesquisa, então `v1.2 (beta)` corresponde aos próprios pontos, espaços e parênteses. Ele não transforma a frase em um curinga seguido por um grupo de captura e ainda encontra todas as ocorrências exatas no texto.
Essa fuga acontece apenas no lado da busca. O campo de substituição ainda segue as regras de string de substituição JavaScript, onde `$&` insere o texto correspondente e `$$` produz um cifrão. A pesquisa literal é, portanto, o padrão seguro para identificar texto, mas uma substituição contendo cifrões ainda merece uma revisão deliberada antes de Substituir tudo ser selecionado.
Modo Regex – quando você deseja o poder e como escapar de caracteres individuais você mesmo
O modo Regex é útil quando vários formulários devem corresponder a uma regra. Um padrão pode ter como alvo um intervalo de dígitos, pontuação opcional ou alternativas sem listar todas as ortografias de origem. Ative o Regex somente quando essa variabilidade for intencional e, em seguida, escape um caractere especial com uma barra invertida quando ele precisar manter seu significado comum, como `.` para um ponto.
A ferramenta compila o padrão com sintaxe regex JavaScript e sempre o aplica globalmente. A limpeza da distinção entre maiúsculas e minúsculas adiciona correspondência sem distinção entre maiúsculas e minúsculas, mas os sinalizadores multilinha, ponto-tudo, fixo e unicode não são oferecidos. Sintaxe inválida é relatada sem alteração do texto. Um padrão válido, mas excessivamente amplo, ainda é executado, portanto, o sucesso da compilação não é prova de um conjunto de correspondências seguro.
Exemplo resolvido - substituindo 'config.yml (antigo)' nas notas de versão no modo literal e, em seguida, tentando fazer o mesmo no modo regex para ver a diferença
Considere as notas de versão contendo `Load config.yml (old)`, `Archive configXyml old` e `Keep config.yml (new)`. Com Regex desativado, pesquise `config.yml (old)` e substitua-o por `config.yml (legacy)`. Exatamente a primeira frase muda porque o ponto e os parênteses são escapados antes que o padrão seja compilado.
Ative o Regex e envie a mesma pesquisa sem escape. O ponto pode consumir outro caractere, enquanto os parênteses agrupam `old` em vez de corresponder aos parênteses literais, de modo que a linha pretendida não corresponde mais à escrita. Um equivalente regex precisa de `config.yml (old)`. A versão literal é mais curta, mais clara e melhor alinhada com esta tarefa de texto exato.
Erros comuns – espaços à direita na caixa de pesquisa, mistura de palavra inteira e literal e esquecimento da verificação de contagem de substituição
Os espaços finais são fáceis de ignorar porque o campo de pesquisa lhes dá pouco peso visual, mas o modo literal os preserva. Uma pesquisa por `beta ` não corresponderá a `beta` no final de uma linha. Verifique os limites do campo quando um termo claramente visível relatar zero substituições e evite adicionar espaços apenas para separar o texto copiado da prosa circundante.
Palavra inteira não é outro nome para literal. Ele envolve a pesquisa compilada em limites de palavras, que são baseados em ASCII aqui e podem falhar em torno de pontuação ou termos acentuados. Inspecione também a contagem de substituições após cada execução e use Desfazer quando for surpreendente. A contagem é uma evidência do escopo, não uma mensagem decorativa de sucesso.
Erros comuns: espaços, limites de palavras inteiras e sintaxe de substituição
Esta página não oferece um guia completo para sinalizadores de expressões regulares. ToolAcre usa correspondência global e, opcionalmente, correspondência sem distinção entre maiúsculas e minúsculas, enquanto as âncoras ainda se referem ao texto completo em vez de cada linha. Padrões copiados de mecanismos com sinalizadores embutidos, classes POSIX ou sintaxe diferente podem falhar na compilação ou podem significar outra coisa no navegador.
Os grupos de captura são suportados, portanto o esboço precisa de uma correção em vez de dizer que eles estão fora da ferramenta. No modo Regex, os grupos podem ser referenciados com `$1`, `$2` e números posteriores na substituição. Essa capacidade é separada da pesquisa literal e dos controles limitados de sinalizadores; use-o somente quando a reestruturação do texto correspondente for o objetivo real.
Os sinalizadores são limitados aqui, enquanto os grupos de captura são suportados em substituições
A regra prática é simples: deixe o Regex desativado ao substituir uma versão conhecida, nome de arquivo, rótulo de produto ou fragmento de frase. O modo literal escapa automaticamente dos caracteres especiais, preservando a pontuação que identifica o alvo. Habilite Regex somente quando você puder indicar qual variação o padrão deve aceitar e por que uma pesquisa exata é insuficiente.
Antes de confirmar as notas de versão editadas, compare a contagem relatada com o número de alterações esperadas e inspecione o resultado. ToolAcre deixa padrões inválidos intactos e fornece Desfazer para um padrão válido que foi longe demais. Essas salvaguardas ajudam, mas a escolha do modo literal para o trabalho literal impede a correspondência ampla antes que ela aconteça.