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.
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);.
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:
Use os modificadores de modo (?i)e [opcionalmente] (?-i):
(?i)G[a-b](?-i).*
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).
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
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].*/.
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.
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/
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
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.
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
.grep
isso, é simplesmente a adição do-i
modificador. Ex:grep -rni regular_expression
para procurar essa expressão 'regular' 'recursivamente, maiúsculas e minúsculas' i'ensensitive, mostrando a linha 'n'umbers no resultado.Respostas:
Supondo que você queira que toda a regex ignore maiúsculas e minúsculas, procure o
i
sinalizador . Quase todos os mecanismos regex suportam: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:
Use os modificadores de modo
(?i)
e [opcionalmente](?-i)
:Coloque todas as variações (ou seja, minúsculas e maiúsculas) no regex - útil se os modificadores de modo não forem suportados:
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.
fonte
find
regex extendida. Por exemplofind . \( -type d -regextype posix-extended -regex '/./[a-c][^.]*/i' \)
, não mostra nenhuma pasta. Branca uma reged semelhantefind . \( -type d -regextype posix-extended -regex './[a-c][^.]*' \)
sem os modificadores mostra as pastas corretas. Alguma idéia do porquê?[a-c]
na pasta atual só .. para fazer mais alguma manipulação ..Depende da implementação, mas eu usaria
VARIAÇÕES:
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
fonte
(?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.expressão regular para validar 'abc' ignorando maiúsculas de minúsculas
fonte
O
i
sinalizador é normalmente usado para diferenciar maiúsculas de minúsculas. Você não dá um idioma aqui, mas provavelmente será algo como/G[ab].*/i
ou/(?i)G[ab].*/
.fonte
Por uma questão de integridade, eu queria adicionar a solução para expressões regulares em C ++ com Unicode:
fonte
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/'
.IGNORECASE
ou(?i)
ou/pattern/i
gerará um erro ou retornará true para cada linha.fonte
C #
especificamente: opções: RegexOptions.IgnoreCase
fonte
[gG] [aAbB]. * provavelmente solução simples se o padrão não for muito complicado ou longo.
fonte
Além das respostas já aceitas:
Uso de Grep:
Observe que, para
grep
isso, é simplesmente a adição do-i
modificador. Ex:grep -rni regular_expression
para 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.
Referências:
man grep
)fonte
Em Java, o
Regex
construtor temEntão, para ignorar casos, use
fonte
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
fonte
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.
fonte