Regex: ignorar distinção entre maiúsculas e minúsculas


316

Como posso fazer o seguinte regex ignorar a distinção entre maiúsculas e minúsculas? Ele deve corresponder a todos os caracteres corretos, mas ignora se são minúsculos ou maiúsculos.

G[a-b].*

Basta ter tanto a maiúsculas e minúsculas incluído no regex ou converter para maiúsculas antes de fazer a correspondência de regex
Chetter Hummin

2
G [a-bA-B]. * Seria o óbvio neste caso geral, a distinção entre maiúsculas e minúsculas depende de uma plataforma dependente e você não está fornecendo uma plataforma.
Joachim Isaksson

16
Se você estiver usando Java, você pode especificar isso com a classe Pattern: Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);.
James.garriss


Observe que, para grepisso, é simplesmente a adição do -imodificador. Ex: grep -rni regular_expressionpara procurar essa expressão 'regular' 'recursivamente, maiúsculas e minúsculas' i'ensensitive, mostrando a linha 'n'umbers no resultado.
Gabriel Staples

Respostas:


444

Supondo que você queira que toda a regex ignore maiúsculas e minúsculas, procure o isinalizador . Quase todos os mecanismos regex suportam:

/G[a-b].*/i

string.match("G[a-b].*", "i")

Verifique a documentação do seu idioma / plataforma / ferramenta para descobrir como os modos correspondentes são especificados.

Se você deseja que apenas parte da regex não diferencie maiúsculas de minúsculas (como minha resposta original presumiu), você tem duas opções:

  1. Use os modificadores de modo (?i)e [opcionalmente] (?-i):

    (?i)G[a-b](?-i).*
  2. Coloque todas as variações (ou seja, minúsculas e maiúsculas) no regex - útil se os modificadores de modo não forem suportados:

    [gG][a-bA-B].*

Uma última observação: se você estiver lidando com caracteres Unicode além do ASCII, verifique se o mecanismo de expressão regular os suporta ou não.


Brilhante! Trabalha para: perl -pe 's / ^ utf-8 \? B \?. * $ // gi' Cancer.1631, sequência de correspondência / substituição "UTF-8? B?" no arquivo Cancer.1631. Isso falha: perl -pe 's / ^ utf-8 \? B \?. * $ // g' Cancer.1631, devido à incompatibilidade de maiúsculas e minúsculas.
Victoria Stuart

Este post seria muito mais claro se não fosse um exemplo tão específico. Como se você quiser ignorar maiúsculas e minúsculas para outra palavra como ".txt" e ".TXT". Ao olhar para esta resposta, ainda não tenho certeza de como poderia fazer isso.
Kyle Bridenstine

Por alguma razão, a regex que você postou não funciona em findregex extendida. Por exemplo find . \( -type d -regextype posix-extended -regex '/./[a-c][^.]*/i' \), não mostra nenhuma pasta. Branca uma reged semelhante find . \( -type d -regextype posix-extended -regex './[a-c][^.]*' \)sem os modificadores mostra as pastas corretas. Alguma idéia do porquê?
Alpha_989

Aqui eu estou tentando encontrar todas as pastas começando com caracteres [a-c]na pasta atual só .. para fazer mais alguma manipulação ..
alpha_989

Honestamente, eu colocaria a opção 2 na parte principal da resposta, pois é genérica e funciona com todos os mecanismos de expressão regular.
Puterdo Borato

154

Depende da implementação, mas eu usaria

(?i)G[a-b].

VARIAÇÕES:

(?i) case-insensitive mode ON    
(?-i) case-insensitive mode OFF

Os tipos modernos de expressões regulares permitem aplicar modificadores apenas a parte da expressão regular. Se você inserir o modificador (? Im) no meio da regex, o modificador se aplicará apenas à parte da regex à direita do modificador. Com esses sabores, você pode desativar os modos precedendo-os com um sinal de menos (? -I).

Descrição é da página: https://www.regular-expressions.info/modifiers.html


Este é o formato modificador para o mecanismo de pesquisa Regex do TortoiseHg.
Mkolfe02 12/03/2015

Você poderia me dizer como isso pode ser alcançado no shell do Linux (digamos no egrep sem usar a opção "-i") genericamente?
Krishna Gupta

1
Explicar o que (?i)faz e como terminá-lo ( (?-i)) teria sido realmente útil. Isso é óbvio porque sua resposta tem 1/3 do número de votos que a pergunta nº 1, em vez de quase o mesmo número, pois eles explicam esse detalhe sutil.
Gabriel Staples

55

expressão regular para validar 'abc' ignorando maiúsculas de minúsculas

(?i)(abc)

1
Funciona perfeitamente com Android Estúdio logcat
Joe

Também funciona em python
conner.xyz 4/19/19

47

O isinalizador é normalmente usado para diferenciar maiúsculas de minúsculas. Você não dá um idioma aqui, mas provavelmente será algo como /G[ab].*/iou /(?i)G[ab].*/.


15

Por uma questão de integridade, eu queria adicionar a solução para expressões regulares em C ++ com Unicode:

std::tr1::wregex pattern(szPattern, std::tr1::regex_constants::icase);

if (std::tr1::regex_match(szString, pattern))
{
...
}

1
Alguém pode me esclarecer por que esta postagem foi rebaixada? A solução aceita usa código específico e, para fins de completude, eu queria adicionar a solução para as bibliotecas padrão da linguagem c ++. Na minha opinião, gerei valor agregado para uma questão mais geral.
7898 Frankenstein

5

Como descobri nesta postagem semelhante (caso ignorado no AWK ), nas versões antigas do awk (como no van OS Mac OS X), talvez você precise usá-lo 'tolower($0) ~ /pattern/'.

IGNORECASEou (?i)ou /pattern/igerará um erro ou retornará true para cada linha.


2

C #

using System.Text.RegularExpressions;
...    
Regex.Match(
    input: "Check This String",
    pattern: "Regex Pattern",
    options: RegexOptions.IgnoreCase)

especificamente: opções: RegexOptions.IgnoreCase


1

[gG] [aAbB]. * provavelmente solução simples se o padrão não for muito complicado ou longo.


gostaria de saber por que esta resposta está errada para a pergunta dada?
alpha_989

Você tem isso em sua resposta "não é muito complicado ou muito tempo"
reggaeguitar

Esta é realmente a única solução que funcionou para o meu caso. Além disso, parece a solução mais genérica que deve funcionar em qualquer lugar. Todas as outras respostas parecem ser muito específicas para implementações específicas de regex.
Puterdo Borato

1

Além das respostas já aceitas:

Uso de Grep:

Observe que, para grepisso, é simplesmente a adição do -imodificador. Ex: grep -rni regular_expressionpara procurar essa expressão 'regular' 'recursivamente, maiúsculas e minúsculas' i'ensensitive, mostrando a linha 'n'umbers no resultado.

Além disso, aqui está uma ótima ferramenta para verificar expressões regulares: https://regex101.com/

Ex: Veja a expressão e a explicação nesta imagem.

insira a descrição da imagem aqui

Referências:


0

Em Java, o Regexconstrutor tem

Regex(String pattern, RegexOption option)

Então, para ignorar casos, use

option = RegexOption.IGNORE_CASE

0

Você pode praticar o Regex no Visual Studio e no Visual Studio Code usando localizar / substituir.

Você precisa selecionar Correspondência entre maiúsculas e minúsculas para expressões regex com maiúsculas e minúsculas. Senão [AZ] não funcionará. Introduza a descrição da imagem aqui

Comunidade Visual Studio 2019


-2

Você também pode levar sua string inicial, que você procurará pela correspondência de padrões, para minúsculas. E usando no seu padrão símbolos em minúsculas, respectivamente.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.