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].*
irmão
fonte
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
Mais opções Java aqui: blogs.oracle.com/xuemingshen/entry/...
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.

mgibsonbr
fonte
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

elrado
fonte
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)
Ravinath
fonte
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].*/.

chooban
fonte
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))
{
...
}
Frankenstein
fonte
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.

senortim
fonte
2

C #

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

especificamente: opções: RegexOptions.IgnoreCase

DonkeyKong
fonte
1

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

alpha_989
fonte
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:

Gabriel Staples
fonte
0

Em Java, o Regexconstrutor tem

Regex(String pattern, RegexOption option)

Então, para ignorar casos, use

option = RegexOption.IGNORE_CASE
Aziz
fonte
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

David Morrow
fonte
-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.

Alexander Drobyshevsky
fonte