Em Java, ao fazer um replaceAll para procurar um padrão regex como:
replaceAll("\\?i\\b(\\w+)\\b(\\s+\\1)+\\b", "$1");
(para remover palavras duplicadas consecutivas que não diferenciam maiúsculas de minúsculas, por exemplo, Teste de teste), não tenho certeza de onde coloquei o ?i
. Eu li que deveria estar no início, mas se eu tirar, então eu detecto palavras consecutivas duplicadas (por exemplo, teste de teste), mas não palavras que não diferenciam maiúsculas de minúsculas (por exemplo, Teste de teste). Portanto, pensei que poderia adicionar o? I no início, mas isso não parece funcionar. Alguma ideia? Obrigado!
java
regex
case-sensitive
Cristal
fonte
fonte
Respostas:
RegexBuddy está me dizendo se você deseja incluí-lo no início, esta é a sintaxe correta:
fonte
Você também pode combinar regexs que não diferenciam maiúsculas de minúsculas e torná-las mais legíveis usando a constante Pattern.CASE_INSENSITIVE como:
fonte
Pattern.compile(myregex, Pattern.MULTILINE | Pattern.CASE_INSENSITIVE)
(?i)
, regexes Java já eram bastante ilegíveis: SSim, a diferenciação de maiúsculas e minúsculas pode ser ativada e desativada à vontade no Java regex.
Parece que você quer algo assim:
Observe que o sinalizador incorporado não
Pattern.CASE_INSENSITIVE
é . Observe também que um supérfluo foi removido do padrão.(?i)
\?i
\b
O
(?i)
é colocado no início do padrão para permitir a não diferenciação de maiúsculas e minúsculas. Nesse caso específico, ele não é substituído posteriormente no padrão; portanto, todo o padrão não diferencia maiúsculas de minúsculas.É importante notar que, na verdade, você pode limitar a não diferenciação de maiúsculas e minúsculas apenas a partes de todo o padrão. Assim, a questão de onde colocá-lo realmente depende da especificação (embora para este problema específico isso não importe, pois não faz
\w
distinção entre maiúsculas e minúsculas.Para demonstrar, aqui está um exemplo semelhante de séries de letras em colapso como
"AaAaaA"
apenas"A"
.Agora, suponha que especificamos que a execução só deve ser recolhida se começar com uma letra maiúscula. Então, devemos colocar o
(?i)
no local apropriado:De maneira mais geral, você pode ativar e desativar qualquer sinalizador dentro do padrão conforme desejar.
Veja também
java.util.regex.Pattern
/regex/i
(Pattern.CASE_INSENSITIVE
em Java), você pode fazer/(?i)regex/
/first(?i)second(?-i)third/
/first(?i:second)third/
\b
entre a\w
e a\s
)Perguntas relacionadas
fonte
Se toda a sua expressão não diferencia maiúsculas de minúsculas, você pode apenas especificar o
CASE_INSENSITIVE
sinalizador:fonte
Você também pode colocar sua string inicial, que vai verificar se há correspondência de padrões, em minúsculas. E use em seu padrão símbolos minúsculos, respectivamente.
fonte